每种每秒可访问数百万次key/value数据库


一种每秒钟可访问数百万次的 key/value数据库 李朝铭 2011.4.16 DTCC2011DTCC2011 nosql 简介 DTCC2011DTCC2011 为什么要用NoSql? 支持更高的高并发读写需求 支持对海量数据的高效率存储和访问 支持对数据库的高可扩展性和高可用性 •常规关系数据库每秒钟可支持数千至万次 •内存数据库可以达到几万次到10多万次 DTCC2011DTCC2011 什么是NoSql •能解决上述三高问题 •它不是常规的关系数据库, 可以没有SQL •可以运行在便宜的PC服务器集群上 开源的NoSQL数据库: Redis,Tokyo Cabinet,Cassandra,Voldemort,MongoDB,Dynomite, HBase,CouchDB,Hypertable, Riak,Tin, Flare, Lightcloud, KiokuDB,Scalaris, Kai, ThruDB, ...... DTCC2011DTCC2011 一种NoSql key/value数据库的性能 • 单机每秒钟可支持数百万次的写入、更新、删除和 查询操作; • 分布式时可达到每秒千万次甚至更多 freeMDB DTCC2011DTCC2011 freeMDB的性能 秒数 1 2 4 8 12 插入 20.11 25.29 34.88 44.04 56.3 查询 4.15 4.35 4.47 4.95 5.31 更新 4.67 4.91 5.11 5.63 6.08 删除 6.42 6.69 6.85 7.49 7.75 插入2 18.42 18.94 20.39 24.09 29.26 万记录/秒 1 2 4 8 12 插入 83.43 132.68 192.40 304.76 357.60 查询 404.27 771.37 1501.32 2711.47 3791.46 更新 359.26 683.39 1313.29 2383.97 3311.29 删除 261.33 501.56 979.69 1791.96 2597.76 插入2 91.08 177.16 329.13 557.15 688.06 每条记录50Byte,每并发线程操作记录数16777216,12并发时库中总计录数为2.01亿条 DTCC2011DTCC2011 freeMDB的性能 秒数 1 2 4 8 12 插入 165.68 200.79 276.46 386.45 493.58 查询 33.51 33.99 34.45 35.21 35.81 更新 41.04 41.29 41.97 43.98 47.06 删除 52.41 52.64 54.22 58.02 61.34 插入2 152.25 153.61 184.16 226.68 292.66 万记录/秒 1 2 4 8 12 插入 81.01 133.69 194.19 277.85 326.31 查询 400.53 789.75 1558.41 3049.54 4497.66 更新 327.04 650.12 1279.18 2441.43 3422.47 删除 256.09 509.95 990.17 1850.64 2625.71 插入2 88.16 174.75 291.52 473.68 550.34 每条记录50Byte,每并发线程操作记录数134217728,12并发时库中总计录数为16.11亿条 DTCC2011DTCC2011 freeMDB的性能 秒数 1 2 4 8 12 插入 21.13 26.97 37.87 48.97 60.25 查询 4.14 4.24 4.49 5.04 5.3 更新 7.5 7.66 9.97 19.62 29.03 删除 6.45 6.58 6.82 7.33 7.82 插入2 19.41 20.34 22.65 28.1 35.01 万记录/秒 1 2 4 8 12 插入 79.40 124.41 177.21 274.08 334.15 查询 405.25 791.38 1494.63 2663.05 3798.61 更新 223.70 438.05 673.11 684.09 693.51 删除 260.11 509.95 984.00 1831.07 2574.51 插入2 86.44 164.97 296.29 477.64 575.05 每条记录500Byte,每并发线程操作记录数16777216,12并发时库中总计录数为2.01亿条 DTCC2011DTCC2011 freeMDB CPU利用率-插入 DTCC2011DTCC2011 freeMDB CPU利用率-查询 DTCC2011DTCC2011 freeMDB数据库在证券行业的应用举例 DTCC2011DTCC2011 一种NoSql key/value数据库 来自上海证券交易所网站信息: 截至到2011.2,上证投资用户数达到9959.32万 户;其中股票个人A/B股用户数为8204.94万;每月 新增加用户数十万至上百万用户不等 DTCC2011DTCC2011 一种NoSql key/value数据库 中大型券商集中的证券系统: • 对交易性能的要求是每秒处理5000笔以上的证券 交易请求,每秒处理10000笔以上的查询请求; • 要求系统可以实现7×24小时交易,全年故障时 间控制在3分钟之内 DTCC2011DTCC2011 一种NoSql key/value数据库 DTCC2011DTCC2011 某厂商证券系统架构 来自互联网 DTCC2011DTCC2011 证券系统 key/value数据库主要表设计 股票实时行情表: key=股票Id,value=股票名称、五档报价及数量、当前价格、均价、开盘价、前收、最高 价、最低价、总额、总量、交易日等 股票当日历史行情表: key=股票Id,value=成交时间、成交价格、成交量等(列式数据库) 客户表: Key=客户Id ,value=客户名称、资金帐号、佣金率、开户信息等 客户持有股票表: Key=客户Id ,value=股票Id、购买日期、购买价格、持有成本、持有数量、可卖数量等 (列式数据库) 股票基础信息表: key=股票名称,value=股票Id DTCC2011DTCC2011 证券系统 key/value数据库实时盈亏分析应用分析 假设某券商有1000万个客户、每客户均在沪市和深市开户、部分客户在创业板开户;平均每客户 持有10种股票;高峰期有100万客户在线;系统要支持行情秒级更新,一般客户3-10秒更新一次行 情。 客户一次实时盈亏分析数据库操作量计算: 查询”客户持有股票表”1次,获取客户持有股票清单; 查询”客户表”1次,获取客户交易佣金费率; 查询”股票实时行情表”10次,获取客户持有的每种股票当前价格、过户费费率; 根据以上结果可实时计算出盈亏结果。 3秒级行情更新系统需要支持的总操作量:(1+1+10)*100万/3 = 400万/秒 1秒级行情更新系统需要支持的总操作量:(1+1+10)*100万/1 = 1200万/秒 DTCC2011DTCC2011 Nosql其它行业应用 云计算、物联网、Web2.0、IM、SNS、DNS、电信、金融、电力… DTCC2011DTCC2011 freeMDB key/value数据库实现原理及开 发 DTCC2011DTCC2011 freeMDB key/value数据库实现原理 DTCC2011DTCC2011 freeMDB key/value数据库可扩展性实现 DTCC2011DTCC2011 freeMDB key/value数据库可靠性实现 DTCC2011DTCC2011 freeMDB key/value数据库高可用性实现1 DTCC2011DTCC2011 freeMDB key/value数据库高可用性实现2 DTCC2011DTCC2011 freeMDB key/value数据库开发库1 • int initMdb (char **mdbAddr); • int insertMdb (char *mdbAddr, unsigned int key, char *record, char **keyAddr, int *duplicateSign,char *firstRecordAddr,int lockId); • int selectMdb (char *mdbAddr, unsigned int key, char **keyAddr,char **firstRecordAddr); • int setFirstRecord (char *keyAddr, char *record); • int scanMdb(char *mdbAddr, int parallelNum, int (*scanFunc)(void)); • unsigned int toIndexKey (char *keySrc, unsigned short int len); DTCC2011DTCC2011 freeMDB 编程示例 #include int scanFunc (unsigned int key, char *keyAddr, char *firstRecordAddr) { printf ("key=%08x_%u,%s\n", key, key, firstRecordAddr); return 0; } int main () { char *mdbAddr = NULL; int ret = 0, duplicateSign = 0; char *p = NULL; char *keyAddr = NULL,*firstRecordAddr = NULL; unsigned int key = 0; initMdb (&mdbAddr); p = (char *) malloc (32); key = 12345; sprintf (p, "%08x", key); ret = insertMdb (mdbAddr, key, p, &keyAddr, &duplicateSign, &firstRecordAddr,1); ret = selectMdb (mdbAddr, key, &keyAddr, &firstRecordAddr); scanMdb (mdbAddr, 2, scanFunc); return 0; } DTCC2011DTCC2011 freeMDB key/value数据库开发库2 •int memPoolInit(char **poolAddr, unsigned short int blockSize, unsigned long blockNum); •int mapPoolInit(char **poolAddr, unsigned short int blockSize, char *fileName, unsigned long *blockNum); •char *memPoolMalloc(char *poolAddr, char ** blockAddr); •int memPoolFree(char *poolAddr, char *blockAddr); DTCC2011DTCC2011 freeMDB ---Linux 上免费的可自由使用的NOSQL Key/Value数据库 mms.studio2011@gmail.com Thanks! DTCC2011DTCC2011
还剩27页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

vonezzz

贡献于2011-12-15

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf