新聞中心
mongodb主要用來干嘛,什么時(shí)候用,存什么樣的數(shù)據(jù)?
不抄百度,純經(jīng)驗(yàn)回答,mongo作為存儲(chǔ)json最方便的nosql數(shù)據(jù)庫。主要兩種情況下使用,1,小網(wǎng)站做著玩,對(duì)安全性要求并不高,也沒有事務(wù)性需求,2,超大型網(wǎng)站,用于存儲(chǔ)非事務(wù)性或非關(guān)鍵性數(shù)據(jù),用于分布式數(shù)據(jù)存取或有分庫需求

創(chuàng)新互聯(lián)建站主營徽縣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),徽縣h5成都小程序開發(fā)搭建,徽縣網(wǎng)站營銷推廣歡迎徽縣等地區(qū)企業(yè)咨詢
這個(gè)主要看業(yè)務(wù),大部分用于存儲(chǔ)一些日志,統(tǒng)計(jì)相關(guān)的數(shù)據(jù),如果不要求事物的話mongo是很好的選擇,天生具備分布式擴(kuò)展,大數(shù)據(jù)量存儲(chǔ)。我們是用java操作,用的spring data mongodb,具體你可以百度猿天地,里面有視頻教程
是一種存儲(chǔ)json對(duì)象,并提供快速查詢,刪除和更新的新一代數(shù)據(jù)庫服務(wù)軟件。可以類比mysql或者sqlserver。但跟傳統(tǒng)數(shù)據(jù)庫不同,它不依賴schema(類似mysql的table定義)和關(guān)系約束。它可以存任何json對(duì)象,并提供多種方法進(jìn)行查詢,聚合,映射。
由于原生json支持,特別適合作為node的數(shù)據(jù)庫。node中比較知名的mongoose,把mongodb進(jìn)行了包裝,提供schema檢驗(yàn),關(guān)系查詢,等傳統(tǒng)sql的功能,通過promise提供并行批量數(shù)據(jù)庫操作,事務(wù)性也可以由第三方插件提供。再結(jié)合redis的內(nèi)存緩存服務(wù),和kareem提供的hook功能?;旧峡梢詢?yōu)雅的完成自動(dòng)緩存查詢,自動(dòng)緩存更新。因此,用node快速開發(fā)情況下會(huì)選擇mongodb。
高并發(fā)下如何生成唯一訂單號(hào)?
最簡(jiǎn)單的辦法就是用用戶名?ip?時(shí)間生成訂單號(hào),然后計(jì)算哈希值后做一定轉(zhuǎn)換就可以生成唯一訂單號(hào)。不過唯一的問題就是不太好查。畢竟這種訂單號(hào)沒有任何規(guī)律可言,后期查詢是個(gè)大麻煩。其實(shí)最建議的方式就是分渠道分地區(qū)建立訂單號(hào)。就和身份證號(hào)生成機(jī)制一樣,各個(gè)地區(qū)可以獨(dú)立生成身份證號(hào),最后合在一起還沒有任何問題。
在高并發(fā)場(chǎng)景下,生成唯一訂單號(hào)可以采用以下幾種方式:
1. 使用數(shù)據(jù)庫自增ID:在數(shù)據(jù)庫中創(chuàng)建一個(gè)自增ID字段,每次插入數(shù)據(jù)時(shí)自動(dòng)遞增生成新的ID。這種方式簡(jiǎn)單易行,但需要保證數(shù)據(jù)庫的性能和穩(wěn)定性。
2. UUID:使用UUID(通用唯一識(shí)別碼)作為訂單號(hào),可以確保唯一性。但是,UUID長度較長,存儲(chǔ)和索引效率較低。
3. Redis自增ID:使用Redis的INCR命令實(shí)現(xiàn)自增ID,可以避免數(shù)據(jù)庫的瓶頸和單點(diǎn)故障問題。
4. Snowflake算法生成ID:Snowflake算法可以生成唯一且有序的ID,適合高并發(fā)場(chǎng)景。它的原理是將一個(gè)64位的long型數(shù)字分成5個(gè)部分,分別表示時(shí)間戳、數(shù)據(jù)中心ID、機(jī)器ID、序列號(hào)等,保證了ID的唯一性和有序性。
還有一種方式是基于時(shí)間戳和序列號(hào)生成唯一訂單號(hào),具體實(shí)現(xiàn)方式如下:
1. 獲取當(dāng)前時(shí)間戳,精確到毫秒級(jí)別。
2. 將時(shí)間戳轉(zhuǎn)換成固定長度的字符串,比如10位或13位。
1、 使用數(shù)據(jù)庫自增Id
優(yōu)勢(shì):編碼簡(jiǎn)單,無需考慮記錄唯一標(biāo)識(shí)的問題。
缺陷:
1) 在大表做水平分表時(shí),就不能使用自增Id,因?yàn)镮nsert的記錄插入到哪個(gè)分表依分表規(guī)則判定決定,若是自增Id,各個(gè)分表中Id就會(huì)重復(fù),在做查詢、刪除時(shí)就會(huì)有異常。
2) 在對(duì)表進(jìn)行高并發(fā)單記錄插入時(shí)需要加入事物機(jī)制,否則會(huì)出現(xiàn)Id重復(fù)的問題。
3) 在業(yè)務(wù)上操作父、子表(即關(guān)聯(lián)表)插入時(shí),需要在插入數(shù)據(jù)庫之前獲取max(id)用于標(biāo)識(shí)父表和子表關(guān)系,若存在并發(fā)獲取max(id)的情況,max(id)會(huì)同時(shí)被別的線程獲取到。
4) 等等。
結(jié)論:適合小應(yīng)用,無需分表,沒有高并發(fā)性能要求。
2、 單獨(dú)開一個(gè)數(shù)據(jù)庫,獲取全局唯一的自增序列號(hào)或各表的MaxId
1) 使用自增序列號(hào)表
到此,以上就是小編對(duì)于mongodb 自增id實(shí)現(xiàn)的問題就介紹到這了,希望這2點(diǎn)解答對(duì)大家有用。
本文名稱:高并發(fā)下如何生成唯一訂單號(hào)?
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/coeceho.html


咨詢
建站咨詢
