您当前的位置是:  首页 > 技术 > 企业通信 > 文摘 >
当前位置:首页 > 技术 > 企业通信 > 文摘 > 融云高性能消息数据存储引擎的设计解析

融云高性能消息数据存储引擎的设计解析

2018-10-26 11:10:46   作者:   来源:CTI论坛   评论:0  点击:6082


  2018年10月22日,QCon全球软件开发大会上海站成功落下帷幕。融云联合创始人兼首席架构师李淼再次受邀出席大会,并进行《高性能消息数据存储引擎的设计解析》的主题演讲,为参会者深入剖析了融云首次公开的最新技术研究成果“数据存储引擎设计”。
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...
  作为互联网通信云独角兽的融云每天要存储的消息量高达数十亿条,多年来融云一直致力于消息存储的优化,从原型阶段的MySQL到后来的Redis、LevelDB,融云不停的探索实践。随着业务的发展和数据的持续增长,融云需要一个既能满足业务需求,又能满足大业务量的消息数据存储,因此融云研究院在2017年决定研发可以满足自身业务特点的高性能消息存储服务(内部代号RCTSDB),并使用全新设计的数据存储引擎。
  以下内容摘自李淼演讲实录。
  融云消息存储历程
  首先是融云在开始时的原型产品验证阶段,大概是在2013年初创阶段,为了验证融云的即时通信业务模式,此时的消息都是存储在MySQL中,其特点是开发简单,可以满足各种产品需求。
  在原型验证通过后,正式上线前融云将离线消息迁移到了Redis中以满足性能需求,而历史消息则继续保存在MySQL中。
  融云经过一年多业务飞速的发展,要存储的消息越来越多,而Redis集群也几乎每1-2个月就要进行扩容。当时处于对成本的考量,融云决定采用相对低廉的磁盘存储方案。此时融云做了很多选型,最终决定采用基于levelDB作为存储引擎并自研DB。但是当时的由于levelDB数据归并消耗高,数据淘汰困难等问题,运行两个月后替换了原来的Redis存储方案。
  目前融云的线上情况是Redis存储离线消息,levelDB存储历史消息,而融云的业务也相对进入了平稳期,Redis最近一次扩容是在2018年的5、6月份,根据业务增速情况可以支持到2018年底。
  存储架构相对稳定,为什么融云还要启动自研存储项目呢?
  满足一些复杂的业务场景需求
  基于目前的存储方案,一些需求实现起来非常困难,而这些需求都是来自客户,从而制约产品的演进,所以融云急需一个替代方案;
  降低整体的成本投入
  融云线上的Redis集群成本是所有设备投入的一半以上,对于存储的优化,显然是可以持续降低公司运营成本;
  简化部署模型
  对于Redis的部署不是很复杂,但是融云除了公有云的业务以外还有私有云项目,继续使用Redis对客户侧的运维部署成本就会变的很高;
  源码可控
  之前融云使用过很多的开源产品,当这些产品不能满足业务需求时,融云又急需某些特性时,这就需要和作者联系,但是大部分时候作者都不能及时响应或者根本不在其计划内,而这时融云只能等或者自己改,自己改的又回馈不了开源产品的主干上,或者当开源产品更新没办法合并,这样就迫使融云必须启动自研存储项目。
  即时通信类产品,自研存储需具备哪些特点?
  快速的数据淘汰能力
  数据淘汰的过程不能对系统产生任何的影响;
  避免数据合并
  相对于levelDB来讲,当写入很多操作的时候levelDB的数据合并经常会发生CPU报警,导致写入查询响应速度慢等情况;
  读写性能要求高
  至少不能比融云现有使用的Redis速度慢;
  开发使用灵活
  在融云存储引擎设计过程中,不仅只是存储数据,而是当作开发框架来进行设计的,在各操作点上都提供Hook,从而能够满足各种业务场景需求。
  站在前人的肩膀上远眺
  融云在存储引擎设计过程中借鉴很多已有的成熟方案,并将这些方案进行优化整合,最终完成了自有的引擎设计。下面将罗列一些方案,并向前人致敬。
  数据写入采用WAL模式
  数据在写入内存时同时记录,当服务宕机或重启的时候可以根据这些恢复内存数据。这些都是按照磁盘顺序写入,可以变相的提高存储引擎性能。一般主流的数据库都会采用这种模式完成数据写入。
  借鉴InfluxDB中的LSM数据结构
  LSM数据结构是目前一些新兴数据库采用的数据结构,像LevelDB、RocksDB、HBase、Cassandra等。即时通讯消息具备时序数据的特点,而InfluxDB更是时序数据库中的佼佼者,融云对InfulxDB做了一些改造,使其更适合存储一些时序数据
  借鉴whiskey 的 K / V 分离存储设计
  whiskey 是2016年发表的一篇论文,主要解决了LSM中大数量写入后频繁数据归并的问题,在LSM这种数据结构中,数据的Key和Value值都是要写入内存的,当数据到达内存设定的阈值时进行归档处理。对于value值较大的数据来说,这个归档就会变得特变频繁,而whiskey的理念是将value单独保存至另外的文件位置,LSM结构内保存的是Key以及这个Value所在文件的偏移量和长度,以此来降低归档频。按照论文上的介绍,归档频率可以降低一个数量级。
  借鉴MyISAM的存储文件设计
  在文件设计这块融云一共经历四版改动,最终殊途同归。融云发现Mysql中MyISAM引擎的文件设计很有类似之处。
  融云消息存储引擎设计
  1.存储逻辑划分
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...
  2.存储文件规划
  关于Table文件分为三种文件进行组织存储:
  • xxx.data 数据存储文件;
  • xxx.index 数据索引文件;
  • xxx.info table信息文件。
  文件并没有按照Table文件进行划分存储,是按照序号字段进行排序,为的是在设计过程中解决主从复制,提高便捷性。
  3.数据写入逻辑
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...
  4.数据文件设计
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...
  5.日志文件设计
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...
  6.索引文件设计
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...
  7.信息文件设计
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...
  内存优化
  • 在M_block中融云重度依赖跳表这种数据结构,融云的存储引擎是用java写的,主要考虑是后面可移植的问题。起初融云采用了java里面内置的ConcurrentSkipList,但是其内存消耗很高,这个主要是java的中对象内存分配的规则导致的。所以融云重写了SkipList,放弃了java中的对象模式。重新造的轮子其内存消耗只有原始 1/4,同时也牺牲了一些东西,例如:删除跳表内的数据时,其删除的数据所占的内存无法释放,但是对于即时通信消息来讲基本上不存在删除的场景,同样一些时序数据也极少存在删除场景;
  • 索引数据融云进行了一系列紧凑处理。优化后40亿级的索引数据,只消耗内存400MB。放弃java对象模式,直接采用byte数值的方式进行数据组织;
  • 对很多的对象又做了一些细节处理,想办法把Java本身的一些内存模型给抹平掉,通过这种方式来降低内存利用率;
  • 最后融云做了LIRS的缓存机制。
  存储优化
  • 索引数据前缀压缩,降低磁盘的写入量;
  • 数值数据采用VarInt编码;
  • 业务数据QuickLZ压缩,平衡了存储及CPU的使用率;
  • 数据写入采用双循环可变长度Buffer,使数据写入过程中是没有直接操作的,有效降低延迟的产生;
  • 重复数据引用写入,该优化对于即时通信场景有显着成效。
  服务端架构
  该架构主要包含Broker,以及一些数据的分组Master、Slaver,这些数据是根据ZooKeeper进行管理,同时向Broker进行汇报。在Broker上会开设不同的端口去设置各种不同的协议。最后是DB manger,主要是用于管理引擎的各种数据查询的插件,就像前文提到的该引擎除了是用于数据存储外还是开发框架,程序员在架构上可以灵活按照熟悉的开发语言去直接操作这些数据。
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝懘鎮樺┑瀣€垫い鎾跺枍缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴i晲绨界紓渚囧枦椤曆囧煡婢跺á鐔荤疀閹惧墎楔闂佽桨鐒﹂崝娆忕暦閵娾晩鏁婇悹渚厛閺€銊х磽閸屾艾鈧绮堟笟鈧、鏍礋椤栨稑娈戦梺鍛婃尫閻掞箓锝為弴銏$厵闁硅鍔﹂崵娆戠棯閹冩倯闁逛究鍔岄~婊堝幢濡も偓楠炲姊虹粙娆惧剱闁圭懓娲獮鍐ㄢ堪閸喎娈熼梺闈涱槶閸庮噣宕戦幘璇查敜婵°倓鑳堕崣鍡涙⒑閸濆嫭澶勬慨妯稿姂瀹曟繂顓兼径瀣幍闂佸憡鍔樼亸娆撴倿閸涘﹥鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔嶇换婵嬪磼濞戞瑧鏆梻鍌氬€峰ù鍥х暦閻㈢ǹ绐楅柛鈩冪☉绾惧潡鏌熼幆鐗堫棄缂佺姵鐓¢弻鏇$疀閺囩儐鈧本绻涚粭鍝勫闁哄苯绉烽¨渚€鏌涢幘瀵告噰妞ゃ垺宀搁弫鎰板幢濞嗘垹妲囨繝娈垮枟閿曗晠宕㈤崗鑲╊洸婵犲﹤鎳愮壕濂告煟閹伴潧澧い搴㈢矊椤啰鈧稒蓱閸婃劗鈧鍠楅悡锟犮€佸Δ鍛妞ゆ垼濮ょ€氬ジ姊绘担鍛婅础閺嬵亝绻涢幘顕呮缂侇喖顭烽獮妯尖偓闈涙憸椤旀洟鏌i悩鍙夊巶闁告侗鍘奸悡鍌炴⒑鏉炴壆顦﹂柣妤€锕ョ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炴灈婵炲懌鍊濆铏圭矙濞嗘儳鍓梺鍛婃尰缁诲嫰骞戦姀鐘斀闁搞儮鏅濋惁鍫ユ⒑缁嬫寧婀扮紒瀣灥閳诲秹鏁愰崪浣瑰瘜闂侀潧鐗嗙换鎺楀礆娴煎瓨鐓忛柛顐ゅ枑閸婃劖顨ラ悙鎻掓殲缂佸倹甯為埀顒婄到閻忔岸寮查鈧埞鎴︽倷閺夋垹浠搁柦鍐憾閹綊宕堕埡浣锋濠殿喖锕ㄥ▍锝夊箯閻樿鐏抽柧蹇e亞娴滃爼姊绘担钘夊惞闁革綇闄勬穱濠囧炊椤掆偓缁犳煡鏌曡箛鏇炐涢柡鈧禒瀣€甸柨婵嗙凹缁ㄤ粙鏌涙繝鍕槐婵﹥妞藉Λ鍐归妶鍡欐创鐎规洘锕㈡俊鎼佸Ψ椤旇棄鏋犳繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煟閹达絾顥夐柡瀣╃窔閺岀喖姊荤€靛壊妲紒鐐礃椤濡甸崟顖氬唨妞ゆ劦婢€缁爼姊虹紒妯虹瑨闁诲繑宀告俊鐢稿礋椤栨氨顔婇梺鐟扮摠缁诲秵绂掗懖鈺冪<闁绘劦鍓欓崝銈嗐亜椤撶姴鍘寸€殿喖顭烽幃銏ゆ偂鎼达綆妲堕柣鐔哥矊缁绘帡寮灏栨闁靛骏绱曢崢浠嬫⒑鐟欏嫬鍔ゆい鏇ㄥ幖鐓ら柟缁㈠枟閻撴瑦銇勯弮鍌滄憘婵炲牊绮撻弻鈩冩媴閻熸澘顫嶉梺璇″灡濡啴宕规ィ鍐╁殤妞ゆ帊鐒﹀▍锕€鈹戦悩鍨毄濠殿噮鍙冮獮蹇涘礃椤旇偐顦ㄥ銈呯箰閸熺増銇欓幎鑺モ拻濞撴埃鍋撻柍褜鍓氱粙鎾诲煘閹烘鐓曢柡鍌濇硶鑲栭梺鐟扮畭閸ㄥ綊鍩為幋鐘亾閿濆簼绨荤紒鎰☉椤啴濡堕崱妯碱槬闂佺懓鍟跨粔鐟扮暦椤愨懡鏃堝川椤旇瀚藉┑鐐舵彧缁蹭粙骞夐敍鍕闁跨喓濮甸悡娆撴煣韫囷絽浜濋悘蹇曟暬閺屽秷顧侀柛鎾磋壘椤繈濡搁敂鑺ョ彿濠德板€撻懗鍫曞煘瀹ュ應鏀介柣妯哄级閹兼劗绱掗悩鍨殌闂囧鏌ㄥ┑鍡欏闁逞屽厸缁瑦淇婇幖浣哥厸闁稿本绮屽鎶芥⒒娴e憡鎯堥柛鐔哄█瀹曟垿骞樼紒妯煎幈闁硅壈鎻槐鏇㈡晬瀹ュ洨纾奸弶鍫氭櫅娴犺鲸顨ラ悙鏉戠瑨閾绘牕霉閿濆懎绾ч悗姘矙濮婄粯鎷呴崨闈涚秺瀵敻顢楅崟顒€浠梺闈浥堥弲娑氱矆閸屾壕鍋撻崗澶婁壕闂佸憡娲﹂崜娑㈠储閻㈠憡鈷戦柟顖嗗嫮顩伴梺绋款儏閹冲酣鎮惧畡鎵殕闁逞屽墴閸┾偓妞ゆ帒鍠氬ḿ鎰箾閸欏鐭掔€殿噮鍋嗛幏鐘差啅椤斿吋顓垮┑鐐差嚟婵挳顢栭幇鏉挎瀬闁搞儺鍓氶悡鐔兼煙闁箑寮鹃柛鐔风箻閺屾盯鎮欓崹顐f瘓濠殿喖锕︾划顖炲箯閸涘瓨鍤嶉柕澹讲鍋撴繝鍥ㄢ拺闂傚牃鏅濈粔鍓佺磼閻樿櫕宕岄柣娑卞枦缁犳稑鈽夊▎鎰仧闂備浇娉曢崳锕傚箯閿燂拷...
  数据存储引擎项目将在年底开源
  李淼在会上表示,为了促进产业内的技术交流,融云会在未来两个月时间对数据存储引擎项目进行开源,开源前除了对引擎做一些优化以外,还会补充一些相关的文档,同时为了方便开发者集成参考还会对代码增加一些注释。项目开源后意味着融云是国内首家将自研的消息存储引擎开源的云通信厂商,也正在为中国的开源环境贡献自己应尽的力量。
  关于融云:融云,安全、可靠的全球互联网通信云服务商,向开发者和企业提供即时通讯和实时音视频通信云服务,据艾瑞等权威数据显示,融云即时通讯云业务市场份额稳居第一。目前,已有数十万互联网用户及上千家企业级用户通过融云实现了场景化沟通,并从中获益,包括招商银行、工商银行、交通银行、民生银行、中国移动、四川航空、CCTV微视、中联重科、58 赶集、大河报业、新东方、陆金所、易车网、猪八戒、蔚来汽车、得到APP、荔枝 FM、汽车之家、优酷来疯、携程爱玩、聚力视频、百姓网等知名企业及应用。
【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。
  • 0

  • 0

  • 0

  • 0

  • 0

  • 0

  • 0

  • 0

专题