掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
KV數(shù)據(jù)庫(kù)是以鍵值對(duì)形式存儲(chǔ)數(shù)據(jù)的一種數(shù)據(jù)庫(kù)。它是一種輕量級(jí)、高性能、易于管理的數(shù)據(jù)庫(kù),并且開(kāi)源實(shí)現(xiàn)較多。KV數(shù)據(jù)庫(kù)常常被用于各種高并發(fā)場(chǎng)景,例如互聯(lián)網(wǎng)廣告投放系統(tǒng)、推薦系統(tǒng)、日志管理系統(tǒng)、即時(shí)消息系統(tǒng)等等。在這些場(chǎng)景下,數(shù)據(jù)的完整性是最基本的保障。然而,KV數(shù)據(jù)庫(kù)通常不支持重復(fù)key,由于技術(shù)原因造成的數(shù)據(jù)丟失問(wèn)題卻時(shí)有發(fā)生。在這種情況下,開(kāi)源界的許多KV數(shù)據(jù)庫(kù)廠商在不影響高性能的同時(shí)提供了支持重復(fù)key的解決方案。在本文中,我們將探討支持重復(fù)key的KV數(shù)據(jù)庫(kù)在保障數(shù)據(jù)完整性上的必要選擇。

創(chuàng)新互聯(lián)主營(yíng)紫金網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開(kāi)發(fā)定制,紫金h5小程序定制開(kāi)發(fā)搭建,紫金網(wǎng)站營(yíng)銷(xiāo)推廣歡迎紫金等地區(qū)企業(yè)咨詢(xún)
保障數(shù)據(jù)完整性
在KV數(shù)據(jù)庫(kù)中,鍵和值是以一對(duì)一的形式進(jìn)行存儲(chǔ)。KV數(shù)據(jù)庫(kù)經(jīng)常會(huì)面臨插入重復(fù)key的情況。在傳統(tǒng)的KV數(shù)據(jù)庫(kù)中,如果插入的key已經(jīng)存在,系統(tǒng)將會(huì)使用新的value值來(lái)覆蓋掉原有的value值。這種處理方式可能會(huì)帶來(lái)一些嚴(yán)重的問(wèn)題。例如,在一個(gè)物流系統(tǒng)中,一個(gè)快遞的狀態(tài)需要被存儲(chǔ),并且需要對(duì)每個(gè)狀態(tài)進(jìn)行更新。如果一個(gè)快遞的狀態(tài)更新記錄被覆蓋了,那么關(guān)于這個(gè)快遞的狀態(tài)更新記錄將會(huì)完全丟失。對(duì)于這種應(yīng)用場(chǎng)景,如果能夠支持重復(fù)key,那么每一個(gè)狀態(tài)更新都可以被完整的記錄下來(lái)。
因此,為了保障數(shù)據(jù)的完整性和可追溯性,支持重復(fù)key是十分必要的。盡管在大多數(shù)場(chǎng)景下,實(shí)際應(yīng)用中并不需要支持重復(fù)key,但是跟傳統(tǒng)的KV數(shù)據(jù)庫(kù)相比支持重復(fù)key的KV數(shù)據(jù)庫(kù)會(huì)更加優(yōu)越。這是因?yàn)樵谝恍┨厥獾膽?yīng)用場(chǎng)景下,支持重復(fù)key能夠完美地解決一些分布式系統(tǒng)中常常遇到的問(wèn)題。
支持重復(fù)key的KV數(shù)據(jù)庫(kù)解決方案
KV數(shù)據(jù)庫(kù)的支持重復(fù)key的實(shí)現(xiàn)方式通常有兩種:通過(guò)增加維度的方式解決,或者使用多版本控制技術(shù)。以下是這兩種方式的解決方案的簡(jiǎn)單闡述。
1. 增加維度
通過(guò)增加維度的方式解決重復(fù)key的問(wèn)題,就是將一個(gè)二維的存儲(chǔ)結(jié)構(gòu)擴(kuò)展成一個(gè)三維的存儲(chǔ)結(jié)構(gòu)。例如,假設(shè)我們要存儲(chǔ)的鍵值對(duì)是{(A, 1), (A, 2), (A, 3)}。在傳統(tǒng)的二維存儲(chǔ)結(jié)構(gòu)中,它會(huì)被映射成一個(gè)元組(A, 3)。而在增加維度的方式下,這個(gè)鍵值對(duì)將會(huì)被映射成三個(gè)元組(A, 1, 0), (A, 2, 1), (A, 3, 2)。這些鍵值對(duì)使用了額外的維度值記錄了它們的插入位置,所以這些鍵值對(duì)是可以同時(shí)存在于數(shù)據(jù)庫(kù)中的。在查詢(xún)的時(shí)候,用戶可以指定那個(gè)位置存的值返回,或者返回所有插入的值。
2. 使用多版本控制技術(shù)
多版本控制技術(shù)的基本思想是把同一個(gè)key的多個(gè)版本都保存下來(lái),每個(gè)版本對(duì)應(yīng)一個(gè)時(shí)間戳。在寫(xiě)入kv對(duì)的時(shí)候,會(huì)為每一個(gè)key生成一個(gè)時(shí)間戳,每一次寫(xiě)操作都會(huì)產(chǎn)生一個(gè)新的版本,并且每一次的讀操作會(huì)默認(rèn)讀取最新的版本。如果需要查詢(xún)歷史版本的kv數(shù)據(jù),可以在讀操作中指定一個(gè)特定的時(shí)間戳來(lái)讀取。這種實(shí)現(xiàn)方式具有一定的復(fù)雜性,需要考慮時(shí)間戳的增長(zhǎng)以及GC等問(wèn)題。
我們看到,上述兩種方式都需要額外的開(kāi)銷(xiāo)。在增加維度的方式下,每個(gè)鍵值對(duì)將需要存儲(chǔ)額外的一個(gè)int類(lèi)型的位置值,因此會(huì)增加存儲(chǔ)空間的使用,特別是當(dāng)數(shù)據(jù)項(xiàng)呈現(xiàn)出密集分布的時(shí)候,存儲(chǔ)空間的額外開(kāi)銷(xiāo)將會(huì)非常大。而多版本控制技術(shù)在增加存儲(chǔ)空間的同時(shí)還需要增加服務(wù)端和客戶端的統(tǒng)一處理和協(xié)議設(shè)計(jì)。這都影響了KV數(shù)據(jù)庫(kù)的性能。
選擇支持重復(fù)key的KV數(shù)據(jù)庫(kù)的必要性
如上所述,支持重復(fù)key的KV數(shù)據(jù)庫(kù)需要消耗額外的存儲(chǔ)空間、帶來(lái)額外的計(jì)算負(fù)擔(dān)和協(xié)議設(shè)計(jì)、可能會(huì)帶來(lái)寫(xiě)端的性能問(wèn)題,甚至可能會(huì)帶來(lái)安全問(wèn)題。因此,在選擇使用KV數(shù)據(jù)庫(kù)的時(shí)候,要慎重考慮是否需要支持重復(fù)key。在某些場(chǎng)景下,如物流系統(tǒng)、推送服務(wù)、數(shù)據(jù)聚集等,支持重復(fù)key是非常必要。對(duì)于其他場(chǎng)景,可以使用傳統(tǒng)的KV數(shù)據(jù)庫(kù)。
綜上所述,對(duì)于一些特殊的應(yīng)用場(chǎng)景,與傳統(tǒng)的KV數(shù)據(jù)庫(kù)相比,支持重復(fù)key的KV數(shù)據(jù)庫(kù)會(huì)更加優(yōu)越。然而,在選擇支持重復(fù)key的KV數(shù)據(jù)庫(kù)時(shí),還需要注意具體的應(yīng)用場(chǎng)景和業(yè)務(wù)需求,并對(duì)其性能和安全進(jìn)行評(píng)估。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
oss作為kv數(shù)據(jù)庫(kù)可以實(shí)現(xiàn)無(wú)限擴(kuò)展。
OSS對(duì)象存儲(chǔ)采用KV的技術(shù)架構(gòu),可以實(shí)現(xiàn)無(wú)限擴(kuò)展,是公認(rèn)的數(shù)據(jù)湖存儲(chǔ)底座。用戶可以通過(guò)離線ETL和在線增量ETL將在線數(shù)據(jù)和實(shí)時(shí)增量數(shù)據(jù),同步到碰銷(xiāo)OSS中,然后對(duì)數(shù)據(jù)做深度的計(jì)算和分析。
kv數(shù)據(jù)庫(kù):LevelDB是google公司開(kāi)發(fā)出來(lái)的一款超高性能kv存儲(chǔ)引擎,只是一個(gè)C/C++編程語(yǔ)言的庫(kù),不包含網(wǎng)絡(luò)服務(wù)封裝。LevelDB提供了Put,Delete和Get三個(gè)方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行修笑蘆游改和查詢(xún),嘩棚比關(guān)系型數(shù)據(jù)庫(kù)簡(jiǎn)單。
哦
,
數(shù)據(jù)庫(kù)困數(shù)
fx中
已存在
id為1的汪緩首數(shù)據(jù)了,你可以先
delete
from
`fx`
where
id
=
然哪敗后再
INSERT
INTO
`fx`
(
`id`
,
`nr`
)
VALUES
(
1,
‘#體驗(yàn)沙發(fā)優(yōu)惠活動(dòng)進(jìn)行中!8888’
)
;
或者
查詢(xún)出
fx
表的更大ID,然后更大id+1為新id的值,
再insert
也可!
把SQL語(yǔ)句中
VALUES
(
后面的
改成和數(shù)據(jù)庫(kù)中`id`字段所有記錄都不重復(fù)的值。
例如改成:
INSERT
INTO
`fx`
(
`id`
,
`nr`
)
VALUES
(
2023,
‘#體驗(yàn)沙發(fā)優(yōu)惠活動(dòng)進(jìn)行中!8888’
)
;
其中,2023是和`fx`表中的所有`id`都不重復(fù)的。
原因:數(shù)據(jù)庫(kù)中的id是唯一鍵,不能重復(fù),如果數(shù)據(jù)庫(kù)已經(jīng)存在id是1的記錄,那么再插入id是1的值就會(huì)報(bào)錯(cuò)。
MySQL
返回:
#1062
–
Duplicate
entry
‘1’
for
key
。這個(gè)錯(cuò)誤的意思是重復(fù)錄入了key是1的數(shù)據(jù)。
擴(kuò)展資料
mysql
主鍵
或者唯一鍵都有獨(dú)一無(wú)二的特點(diǎn)。當(dāng)主鍵或唯一鍵出現(xiàn)重復(fù)值得時(shí)候就會(huì)弊磨態(tài)報(bào)#1062
–
Duplicate
entry
這樣得錯(cuò)誤,如果是主鍵在錯(cuò)誤信息后面還會(huì)出現(xiàn)’PRIMARY’這個(gè)單詞。
1、主鍵primary
key
,可以保證字段數(shù)據(jù)唯一性,但是一租源張表只有一個(gè)主鍵,不可為空游如。
2、唯一鍵unique
key,也可以保證字段中的數(shù)據(jù)唯一的,但唯一鍵在一張表中可以有多個(gè),可以為空。
你看
主鍵(ID
)團(tuán)逗拿
是不是指跡設(shè)置
自動(dòng)編號(hào)
或塌搭者標(biāo)識(shí)了
kv數(shù)據(jù)庫(kù) 支持重復(fù)key的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于kv數(shù)據(jù)庫(kù) 支持重復(fù)key,kv數(shù)據(jù)庫(kù)支持重復(fù)key:保障數(shù)據(jù)完整性的必要選擇,oss作為kv數(shù)據(jù)庫(kù),導(dǎo)入數(shù)據(jù)庫(kù)出現(xiàn)#Duplicate entry ‘1’ for key 1 怎么解決??!的信息別忘了在本站進(jìn)行查找喔。
香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專(zhuān)業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流