自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于Redis+MySQL+MongoDB存儲(chǔ)架構(gòu)應(yīng)用

存儲(chǔ) 存儲(chǔ)軟件 Redis MongoDB 存儲(chǔ)架構(gòu)
使用MongoDB切片的水平動(dòng)態(tài)添加,可在不中斷平臺(tái)業(yè)務(wù)系統(tǒng)的同時(shí)保障擴(kuò)容后的查詢速度和云計(jì)算效能;依據(jù)切片鍵索引分片,位于各切片獨(dú)立進(jìn)行計(jì)算,使大數(shù)據(jù)下的實(shí)時(shí)分析成為現(xiàn)實(shí)。對(duì)于高頻訪問的數(shù)據(jù)放在了Redis中,有效地降低磁盤I/O,使業(yè)務(wù)系統(tǒng)響應(yīng)更為敏捷,滿足了高并發(fā)下應(yīng)用服務(wù)的高呑吐要求。

 Redis+MySQL+MongoDB技術(shù)架構(gòu)實(shí)現(xiàn)了本項(xiàng)目中大數(shù)據(jù)存儲(chǔ)和實(shí)時(shí)云計(jì)算的需求。使用MongoDB切片的水平動(dòng)態(tài)添加,可在不中斷平臺(tái)業(yè)務(wù)系統(tǒng)的同時(shí)保障擴(kuò)容后的查詢速度和云計(jì)算效能;依據(jù)切片鍵索引分片,位于各切片獨(dú)立進(jìn)行計(jì)算,使大數(shù)據(jù)下的實(shí)時(shí)分析成為現(xiàn)實(shí)。對(duì)于高頻訪問的數(shù)據(jù)放在了Redis中,有效地降低磁盤I/O,使業(yè)務(wù)系統(tǒng)響應(yīng)更為敏捷,滿足了高并發(fā)下應(yīng)用服務(wù)的高呑吐要求。

[[259765]]

基于移動(dòng)位置服務(wù)的應(yīng)用是根據(jù)用戶所在位置提供的一種增值業(yè)務(wù),主要通過移動(dòng)定位技術(shù)獲得其當(dāng)前所在位置,在電子地圖和業(yè)務(wù)平臺(tái)的支持下,提供位置相關(guān)的信息服務(wù)。通過互聯(lián)網(wǎng)提供軟件服務(wù)的SaaS(Software as a Service)模式具有企業(yè)初期零投入,不需服務(wù)器、系統(tǒng)研發(fā)等軟硬件投入等獨(dú)特的優(yōu)點(diǎn),為廣大中小企業(yè)解決前期資金投入不足的情況下開展信息化建設(shè),引入管理信息系統(tǒng)提供了一個(gè)可行的模式。

1 項(xiàng)目簡介

基于此需求背景提出開發(fā)一種面向中小企業(yè)移動(dòng)位置服務(wù)的SaaS平臺(tái),幫助所有具有外勤、外巡、外服的戶外工作業(yè)務(wù)的中小企業(yè)降低成本,將定位技術(shù)與智能手機(jī)客戶端相結(jié)合,利用運(yùn)營商的GSM/WCDMA等無線網(wǎng)絡(luò),為企業(yè)提供在外工作人員的具體位置和行走軌跡,同時(shí)實(shí)現(xiàn)考勤簽到、快速審批、位置標(biāo)注、語音群聊、數(shù)據(jù)上報(bào)、區(qū)域預(yù)警,更好地進(jìn)行地理化分析、業(yè)績審視,快速響應(yīng)客戶需求和有效管理員工,深度鞏固企業(yè)在市場中主體地位和增強(qiáng)企業(yè)核心競爭力。

2 業(yè)務(wù)數(shù)據(jù)分析

移動(dòng)位置服務(wù)的SaaS平臺(tái)作為企業(yè)移動(dòng)互聯(lián)網(wǎng)應(yīng)用,應(yīng)用過程將積累大量數(shù)據(jù)。其中包括:靜態(tài)信息(手機(jī)號(hào)碼、注冊信息、手機(jī)型號(hào)等);位置信息(行動(dòng)軌跡、速度、停留時(shí)間、地點(diǎn)屬性);與APP關(guān)聯(lián)的數(shù)據(jù)(訪問行為、社交行為、交易行為等);交互特點(diǎn)(報(bào)告頻率、數(shù)據(jù)類型與格式等)。其數(shù)據(jù)容量和特點(diǎn)較傳統(tǒng)業(yè)務(wù)有較大地變化。

2.1 數(shù)據(jù)來源分析

數(shù)據(jù)來源包括終端采集的數(shù)據(jù)和SaaS平臺(tái)數(shù)據(jù),終端數(shù)據(jù)涵蓋了Android、IOS智能終端和PC端,智能終端是企業(yè)應(yīng)用的數(shù)據(jù)采集器,是企業(yè)人在業(yè)務(wù)活動(dòng)中“人體器官”的延伸。同時(shí)還有部分?jǐn)?shù)據(jù)源于PC端;另外系統(tǒng)運(yùn)行過程中,會(huì)產(chǎn)生大量日志數(shù)據(jù)。

(1)終端采集的數(shù)據(jù)

①軌跡數(shù)據(jù):以包括公司id、用戶id、經(jīng)緯度、地址、定位時(shí)間、定位類型等信息的一個(gè)數(shù)據(jù)樣本為例,默認(rèn)30 s采集一次,假如企業(yè)員工默認(rèn)工作時(shí)間8小時(shí),每個(gè)員工每天條數(shù)為2 080條,假定用戶數(shù)為10 000,那么每天有2 080萬條;單條數(shù)據(jù)占用空間184 KB,10 000用戶一天占用空間約為3 GB。

②常規(guī)業(yè)務(wù)數(shù)據(jù):常規(guī)業(yè)務(wù)數(shù)據(jù)種類有考勤、工作計(jì)劃、工作日志、申請(qǐng)、事件提醒、通知公告、銷售上報(bào)等;保守預(yù)計(jì)單條數(shù)據(jù)容量為512 KB,按每個(gè)用戶每天產(chǎn)生15條相關(guān)業(yè)務(wù),其數(shù)據(jù)量為7 680 KB,10 000用戶一天產(chǎn)生數(shù)據(jù)量約為73 MB。

③即時(shí)聊天和工作微博數(shù)據(jù):即時(shí)聊天和工作微博數(shù)據(jù)為非結(jié)構(gòu)化數(shù)據(jù),包含如下種類:語音、圖片、文本、位置分享等。保守預(yù)計(jì)單條圖片語音數(shù)據(jù)量為: 100 KB,按每個(gè)用戶每天產(chǎn)生30條,其數(shù)據(jù)量為3 000 KB,10 000用戶一天產(chǎn)生數(shù)據(jù)量約為28 GB。

(2)平臺(tái)數(shù)據(jù)

作為服務(wù)眾多企業(yè)的云平臺(tái),還有如下種類數(shù)據(jù)需要產(chǎn)生和管理:企業(yè)、企業(yè)組織、企業(yè)用戶、用戶通信錄、用戶通信錄個(gè)性化備注、群組名片等;平臺(tái)方面的數(shù)據(jù)暫且不作考量,與普遍的企業(yè)應(yīng)用基本類似。

2.2 數(shù)據(jù)特點(diǎn)分析

(1)移動(dòng)化。與PC應(yīng)用相比較,移動(dòng)應(yīng)用數(shù)據(jù)采集的時(shí)空變化了,智能終端不知疲倦,可以自動(dòng)采集上報(bào)如位置等信息;同時(shí)移動(dòng)化使得采集數(shù)據(jù)的便捷性得到了極大提高,用手機(jī)拍照立即便可上傳,相比過去的照相機(jī)采集沒有空間限制也沒有鏈接PC上傳的限制。

(2)非結(jié)構(gòu)化。采集的圖片語音等媒體數(shù)據(jù)非結(jié)構(gòu)化,例如采集門店的貨品陳列的圖片數(shù)據(jù)等,工作微博分享的數(shù)據(jù)文檔化,與傳統(tǒng)結(jié)構(gòu)化、需要事務(wù)支持的數(shù)據(jù)有明顯差異。

(3)平臺(tái)級(jí)增量化。與以往企業(yè)級(jí)應(yīng)用對(duì)應(yīng)一家企業(yè)增量相比,平臺(tái)級(jí)數(shù)據(jù)增量化帶來的數(shù)據(jù)量巨大增加,通過上面的分析,10 000用戶每天會(huì)帶來大約30 GB的數(shù)據(jù)增量。30 GB數(shù)據(jù)有些均勻地提交到平臺(tái),有些會(huì)以峰值的方式提交到平臺(tái);考勤通常集中在上下班時(shí)段,而軌跡則均勻分布在所有上班時(shí)間。

針對(duì)以上數(shù)據(jù)分析,如何解決其大容量和非結(jié)構(gòu)化數(shù)據(jù)特點(diǎn)面臨的存儲(chǔ)和處理的挑戰(zhàn)?通過技術(shù)選型和前期的測試數(shù)據(jù)對(duì)比,選用了Redis+MySQL+Mongodb架構(gòu)的解決方案。

3 相關(guān)技術(shù)

3.1 Redis簡介

Redis(Remote Dictionary Server)是一個(gè)使用ANSI C語言開發(fā)的開源的Key-Value存儲(chǔ)系統(tǒng),它和目前較流行的Memcached類似,都是基于內(nèi)存(緩存)的數(shù)據(jù)存儲(chǔ)方式,不同的是Redis支持的數(shù)據(jù)類型更加豐富并且對(duì)每種數(shù)據(jù)結(jié)構(gòu)提供了豐富的操作。同時(shí),Redis不同于Memcached之處在于它會(huì)將更新的數(shù)據(jù)異步的持久化到硬盤中或者把進(jìn)行過的修改操作寫入日志文件中。Redis雖然是Key/Value形式的數(shù)據(jù)庫,但是它吸收了部分關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn),如在能保存Lists和Sets類型的數(shù)據(jù)的同時(shí),還能完成排序等高級(jí)功能,同時(shí)在實(shí)現(xiàn)INCR(自增)、SETNX(若不存在Key則創(chuàng)建并設(shè)值)等功能時(shí)保證其操作的原子性。在此基礎(chǔ)上還實(shí)現(xiàn)了Master-Slave(主從)同步[2]。Redis主從復(fù)制特點(diǎn):(1)支持一個(gè)Master可以擁有多個(gè)Slave,同時(shí)Slave還可以接收其他的Slave;(2)主從復(fù)制不會(huì)阻塞Master和Slave,在同步數(shù)據(jù)時(shí),Master和Slave都可以接收Client請(qǐng)求[2]。

3.2 MongoDB及其自動(dòng)分片簡介[3]

MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫[4]。由C++語言編寫。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。MongoDB的特點(diǎn)是面向集合存儲(chǔ),模式自由,支持動(dòng)態(tài)查詢、完全索引、查詢、復(fù)制和故障轉(zhuǎn)移,自動(dòng)處理碎片[5]。MongoDB的核心理念在于文檔模型,它是MongoDB數(shù)據(jù)的基本單元,等價(jià)于關(guān)系型數(shù)據(jù)庫的行。MongoDB中的集合等價(jià)于關(guān)系型數(shù)據(jù)庫中的表。一個(gè)單一的MongoDB可以承載多個(gè)獨(dú)立的數(shù)據(jù)庫,每個(gè)數(shù)據(jù)庫可以擁有自己的集合和管理權(quán)限。

MongoDB的分片架構(gòu)是指把數(shù)據(jù)分割成不同部分,在不同的機(jī)器上的存儲(chǔ)過程,通過分割數(shù)據(jù)到不同的服務(wù)器上,使得無需使用更強(qiáng)大的機(jī)器來存儲(chǔ)更多的數(shù)據(jù)和處理更大的負(fù)載。MongoDB支持自動(dòng)分片,集群可以自動(dòng)分割數(shù)據(jù)和數(shù)據(jù)的再均衡。MongoDB提供以下的分片技術(shù):(1)對(duì)負(fù)載的變換和數(shù)據(jù)的分布自動(dòng)平衡;(2)動(dòng)態(tài)添加額外服務(wù)器;(3)無單點(diǎn)故障;(4)自動(dòng)故障轉(zhuǎn)移[6]。

4 技術(shù)實(shí)現(xiàn)

4.1 架構(gòu)功能角色

Redis+MySQL+Mongodb架構(gòu)對(duì)應(yīng)功能角色如下。

Redis:基于內(nèi)存高速緩存,保存集群中央會(huì)話,即時(shí)通信離線消息隊(duì)列,即時(shí)通信重發(fā)消息集合,用戶令牌生命周期管理,應(yīng)用高頻訪問數(shù)據(jù)緩存,HTML5模板數(shù)據(jù)緩存,靜態(tài)應(yīng)用資源緩存。

MySQL:進(jìn)行事務(wù)數(shù)據(jù)存儲(chǔ):相關(guān)企業(yè)帳號(hào)數(shù)據(jù),企業(yè)常規(guī)業(yè)務(wù)數(shù)據(jù),企業(yè)平臺(tái)交易數(shù)據(jù)。

Mongodb:進(jìn)行非結(jié)構(gòu)化文檔數(shù)據(jù)存儲(chǔ):包括圖片、圖標(biāo)、語音、工作微博文本以及結(jié)合位置數(shù)據(jù)的非結(jié)構(gòu)化的文檔數(shù)據(jù),需要?jiǎng)討B(tài)擴(kuò)展無固定模式的數(shù)據(jù),應(yīng)用日志數(shù)據(jù),需要map-reduce計(jì)算的數(shù)據(jù)。

4.2 可靠性和可用性保障措施

為了保證生產(chǎn)系統(tǒng)數(shù)據(jù)可靠性和可用性,規(guī)避Redis+MySQL+Mongodb單點(diǎn)故障,分別作了主從備份,在此基礎(chǔ)上采用了KEEPALIVE,通過VRRP協(xié)議實(shí)現(xiàn)了故障的自動(dòng)切換。Redis配置了主從,MySQL配置了主從,Mongodb配置了切片;詳細(xì)配置清單舉例如下。

Redis主從配置需要在從配置文件Redis.conf指定主IP和端口:slaveof 192.168.10.10 6379

MySQL主從配置:

主配置:

  1. server-id=1;log-bin=mysql-bin;binlog-do-db=wqt_web 

從配置:

  1. server-id=2;log-bin=msyql-bin;master-host=192.168.10.3;master-user=slaveuser;master-password=gotop4001680756;master-port=3306;… 

Mongodb切片配置:

  1. mongod-shardsvr-port 10001-dbpath=/home/data/shard11/-logpath /home/data/shard11/mongodb.log--fork 
  2. mongod-shardsvr-port 10002-dbpath=/home/data/shard12/-logpath 
  3. … 
  4. mongo 127.0.0.1:20000/admin 

配置分片必須要鏈接admin集合。鏈接成功后可以把分片加入集群:

  1. db.runCommand({"addshard""127.0.0.1:10001"}) 
  2. … 
  3. db.runCommand({"addshard""127.0.0.1:10004"}) 

這樣就成功地把4個(gè)shard加入了分片。制定分片的規(guī)則如下:

  1. db.runCommand({"shardcollection""kingfihser.tablename","key":{"primaryKey":1}}) 

激活分片的設(shè)置:db.runCommand({"enablesharding":"kingfisher"}),***成功的配置了分片。

4.3 詳細(xì)代碼

4.3.1 Redis實(shí)現(xiàn)案例

在通信中,作為發(fā)布訂閱隊(duì)列使用,Web發(fā)布消息,進(jìn)入Redis發(fā)布訂閱頻道,通信中心消費(fèi)此頻道消息,所有的信息發(fā)布都在Redis中進(jìn)行,從而提高了響應(yīng)的速度。

 

  1. public boolean sendMsg(String msg){  
  2.   boolean rebool=true;  
  3.   Jedis jedis=null;  
  4.   try{  
  5.   jedis=(Jedis)pool.getResource();  
  6.   jedis.publish("kingfisher.*",msg); 
  7.   }catch(Exception e){  
  8.   e.printStackTrace();  
  9.   rebool=false;  
  10.   }finally{  
  11.   pool.returnResource(jedis);  
  12.   }  
  13.   return rebool;  
  14.   } 

4.3.2 Mysql實(shí)現(xiàn)

進(jìn)行事務(wù)數(shù)據(jù)存儲(chǔ):包括相關(guān)企業(yè)帳號(hào)數(shù)據(jù),企業(yè)常規(guī)業(yè)務(wù)數(shù)據(jù),企業(yè)與平臺(tái)交易數(shù)據(jù)。此部分的存儲(chǔ)計(jì)算采用HIBERNATE+SPRING方式實(shí)現(xiàn)。

4.3.3 Mongodb實(shí)現(xiàn)案例

(1)媒體數(shù)據(jù)利用GFS網(wǎng)格文件子系統(tǒng)存儲(chǔ)。

  1. class fileservice(BaseHandler):  
  2.   def get(self):  
  3.   id=self.get_argument("id""") 
  4.   f=GridOut(self.mongo.fs,ObjectId(id)) 
  5.   try:  
  6.   fn=f.filename.lower() 
  7.   … 
  8.   self.write(f.read())  
  9.   def post(self): 
  10.   … 
  11.   def delete(self): 
  12.   … 

(2)工作微博內(nèi)容和二維空間索引,以及軌跡數(shù)據(jù)的索引和查詢。

  1. class listmark(BaseHandler): 
  2. ′′′ 

搜索工作微博列表

  1. ′′ 
  2.   def get(self): 
  3.   self.set_header("Content-Type", "application/json") 
  4.   … 
  5.   class mark(BaseHandler): 
  6.   ′′′ 

基于二維空間的搜索

  1. ′′′  
  2.   def get(self): 
  3.   self.set_header("Content-Type","application/json") 
  4.   try:  
  5.   … 

(3).map-reduce計(jì)算做日志分析。

  1. ′′′ 
  2. 調(diào)度生成當(dāng)天用戶訪問行為 
  3. ′′′ 
  4. class currdayuser(BaseHandler): 
  5. def get(self): 
  6. … 
  7. ′′′ 

調(diào)度生成當(dāng)天服務(wù)運(yùn)行行為

  1. ′′′ 
  2.   class currdayservice(BaseHandler): 
  3.   def get(self): 

目前這種存儲(chǔ)結(jié)構(gòu),解決了項(xiàng)目中大數(shù)據(jù)存儲(chǔ)和實(shí)時(shí)云計(jì)算的需求。使用了Mongodb切片的水平動(dòng)態(tài)添加,可不中斷平臺(tái)業(yè)務(wù)系統(tǒng)的同時(shí)保障擴(kuò)容后的查詢速度和云計(jì)算效能;依據(jù)切片鍵索引分片,計(jì)算位于各切片獨(dú)立進(jìn)行,使大數(shù)據(jù)下的實(shí)時(shí)分析成為現(xiàn)實(shí)。對(duì)于高頻訪問的數(shù)據(jù)放在了Redis中,有效地降低了磁盤I/O,使業(yè)務(wù)系統(tǒng)響應(yīng)更為敏捷,滿足了高并發(fā)下的應(yīng)用服務(wù)的高吞吐要求。雖然大數(shù)據(jù)的存儲(chǔ)和計(jì)算變得簡單,但由于版本和技術(shù)在日新月異的變化,數(shù)據(jù)系統(tǒng)的管理工作并不輕松。在新架構(gòu)下的運(yùn)維管理還會(huì)遇到新的挑戰(zhàn)并需不斷優(yōu)化完善。

責(zé)任編輯:武曉燕 來源: MongoDB
相關(guān)推薦

2021-09-06 14:52:17

MySQL存儲(chǔ)架構(gòu)

2011-08-12 09:14:16

OpenShiftMongoDB

2019-01-14 14:25:25

MySQL存儲(chǔ)邏輯架構(gòu)

2022-03-08 15:24:23

BitMapRedis數(shù)據(jù)

2010-05-21 10:58:19

MySQL存儲(chǔ)引擎

2010-06-13 13:50:02

MySQL存儲(chǔ)引擎

2019-10-18 16:24:01

MySQLRedis數(shù)據(jù)庫

2015-07-20 16:47:22

MongoDB

2011-05-23 13:30:00

MySQLMongoDB

2012-06-26 10:35:40

Squid架構(gòu)

2021-09-02 16:10:57

系統(tǒng)數(shù)據(jù)存儲(chǔ)

2012-09-29 13:33:16

Squid圖片存儲(chǔ)存儲(chǔ)架構(gòu)

2021-07-27 05:05:46

MongoDB存儲(chǔ)Hangfire

2018-08-29 15:23:18

數(shù)據(jù)庫NoSQLMongoDB

2017-08-07 09:39:52

HBase大數(shù)據(jù)存儲(chǔ)

2011-05-23 09:23:19

MySQLMongoDB

2013-10-10 09:05:26

新浪微博Redishadoop

2023-09-05 23:29:49

前端Vue

2018-11-28 14:21:13

對(duì)象存儲(chǔ)架構(gòu)

2018-09-17 10:47:28

MongoDB存儲(chǔ)Docker
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)