添加mongodb支持
最近花了些时间,将引擎的存储换成了mongodb。
私下,我觉得现有的存储机制极为落后。现在写数据的操作交由单独的进程完成,该进程兼当数据缓冲与持续化数据的责任。此次引擎的更换,只是简单的利用mongo的官方c驱动,将数据打到mongo里面,代替写文件的做法而已。该进程的数据缓冲角色,还是没有变化。mongodb的优势在于对内存的高效利用,增加一层作为中转,就会失去这个速度上的优势。
往引擎里添加mongo,比较头大的是跟引擎脚本的类型系统打交道。比较了一下BSON支持的数据格式,能够比较好的容纳引擎的数据。但是引擎的关联数组(类似python的dict)和异构数组,在C层用起来不太方便。引擎这边的类型,都是用一个svalue进行封装,里面用union包装int、float等基础类型,以及字符串指针和数组等引用类型。但是,svalue的打包却需要手工做,没有封装方便的打包函数。关联数组的使用还算方便,只要构造好key和value的svalue值,调用find_for_insert,然后assign_svalue就可以了。
bson到引擎和引擎到bson的格式转换搞定之后,就找了个开源的带锁队列,用来作数据库连接池的管理。目前有个问题未解决,如果连接不到数据库,程序就会崩掉。。然后测试了一下读写,基本没问题了。主要是有部分储存使用了整型的key,而mongodb不接受整型key。
剩下的主要是对象的生命周期管理。连接对象由数据库连接池进行管理,如果多线程读写时有线程hang住,该连接就不会被释放了。用于传送数据到数据库的bson对象,会在每次传送完成后被释放,这里应该没有问题。从数据库序列化为引擎的数据对象时,产生的关联数组等数据交由vm进行管理,这块是通过引用计数做的,要分析泄漏的问题,可能要结合具体的脚本进行分析了。
性能方面,还没有进行测量,打算通过Dtrace或者SystemTap进行,顺便用valgrind做做内存泄漏检测。瞎猜测一下,socket进行数据中转和序列化对象可能会是瓶颈。
添加mongodb支持的更多相关文章
- Windows平台下为Python添加MongoDB支持PyMongo
到Python官网下载pymongo-2.6.3.win-amd64-py2.7.exe 安装pymongo-2.6.3.win-amd64-py2.7.exe 参照官方的用例进行测试 打开命令提示符 ...
- spring boot 中添加mongodb支持
1.添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...
- CentOS平台下为Python添加MongoDB支持PyMongo
下载PyMongo [root@leezhen ~]# wget https://pypi.python.org/packages/source/p/pymongo/pymongo-2.6.3.tar ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 把自己Github上的代码添加Cocoapods支持
转载请注明原链接:http://www.cnblogs.com/zhanggui/p/6003481.html 一.前言 这两天被cocoapods折磨的心力憔悴.看cocoapods官网的添加支持, ...
- Spring Boot 添加Shiro支持
前言: Shiro是一个权限.会话管理的开源Java安全框架:Spring Boot集成Shiro后可以方便的使用Session: 工程概述: (工程结构图) 一.建立Spring Boot工程 参照 ...
- 在IntelliJ IDEA中添加框架支持时找不到Hibernate的解决办法
问题描述 第一次在Add Frameworks support界面中添加hibernate支持的时候,异常中断,导致没有成功添加. 第二次进入Add Frameworks support窗口时,发现找 ...
- 别再为了iOS新系统设备而重新安装一个新版Xcode了.其实我们可以添加版本支持
众所周知,Xcode7.3的代码补全是有问题的 如导入自定义类之后,在代码中并不会补全相应的类名... 但Xcode7.2是没有这个问题的,但很多时候我们自己的设备都升级到了iOS9.3.X系统,导 ...
- 将自己库添加Cocoapods支持
给库添加Cocoapods支持, 使这个工具使用起来更加方便, 更好的使用Cocoapods, 助力iOS程序开发, 下面进入正题, 想要实现这个过程, 绝对不虚此读. 首先写好一个要添加Cocoap ...
随机推荐
- php solr 扩展
安装php的solr扩展 下载地址: http://pecl.php.net/get/solr windows下载地址: http://downloads.php.net/pierre/php_sol ...
- Octopus系列之开发中灵光点收集,先放到这里,后面会整理的
项目中引用的组件 1.System.Data.SQLite.dll 自行编译 SQLite-1.0.66.0-source 3.5的框架:F:\Code\开源项目\SQLite\1.0.66.0_x8 ...
- ext DateTime.js在ie下显示不全
问题: ext在使用DateTime.js的时候会出现在日期控件在ie下显示不完成.如图 少了底部的“今天按钮”. 解决方法: 在ext/ux/form/DateTime.js (我的是这个路径,根 ...
- POJ 3660
233333... Description: 就是说呢.牛是的实力室友大小之分的.然后呢.告诉你很多pair 表示任意两头牛之间的实力大小.按实力排序之后.问你一共有多少只牛的排名是确定了的. T_T ...
- IoTimerInLineHook
#ifndef CXX_IOTIMERINLINEHOOK_H # include "IoTimerInlineHook.h" #endif ULONG32 SSDT_NtOpen ...
- 使用System.Timers.Timer类实现程序定时执行
使用System.Timers.Timer类实现程序定时执行 在C#里关于定时器类有3个:System.Windows.Forms.Timer类.System.Threading.Timer类和Sys ...
- Android窃取用户信息新思路
0×01 我们能得到哪些android手机上的app敏感信息手机上的app敏感信息◦通讯录,通讯记录,短信◦各种app的帐号密码,输入信息资料等◦各种影音资料,照片资料◦等等0×02 我们有哪些方法 ...
- hihocoder 1138 Islands Travel dijkstra+heap 难度:2
http://hihocoder.com/problemset/problem/1138 很久不用最短路,几乎连基本性质也忘了,结果这道题就是某些最短路算法空间复杂度是o(n) 这里总结四种算法 算法 ...
- ZOJ 3646 Matrix Transformer 二分匹配,思路,经典 难度:2
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4836 因为要使对角线所有元素都是U,所以需要保证每行都有一个不同的列上有U,设 ...
- MATLAB中mexFunction函数的接口规范(转载)
MEX文件的调用极为方便,其调用方式与MATALAB的内建函数完全相同,只需要在命令窗口内输入对应的文件名称即可. C语言MEX程序代码文件有计算子例程(Computational routine)和 ...