最近花了些时间,将引擎的存储换成了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支持的更多相关文章

  1. Windows平台下为Python添加MongoDB支持PyMongo

    到Python官网下载pymongo-2.6.3.win-amd64-py2.7.exe 安装pymongo-2.6.3.win-amd64-py2.7.exe 参照官方的用例进行测试 打开命令提示符 ...

  2. spring boot 中添加mongodb支持

    1.添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  3. CentOS平台下为Python添加MongoDB支持PyMongo

    下载PyMongo [root@leezhen ~]# wget https://pypi.python.org/packages/source/p/pymongo/pymongo-2.6.3.tar ...

  4. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. 把自己Github上的代码添加Cocoapods支持

    转载请注明原链接:http://www.cnblogs.com/zhanggui/p/6003481.html 一.前言 这两天被cocoapods折磨的心力憔悴.看cocoapods官网的添加支持, ...

  6. Spring Boot 添加Shiro支持

    前言: Shiro是一个权限.会话管理的开源Java安全框架:Spring Boot集成Shiro后可以方便的使用Session: 工程概述: (工程结构图) 一.建立Spring Boot工程 参照 ...

  7. 在IntelliJ IDEA中添加框架支持时找不到Hibernate的解决办法

    问题描述 第一次在Add Frameworks support界面中添加hibernate支持的时候,异常中断,导致没有成功添加. 第二次进入Add Frameworks support窗口时,发现找 ...

  8. 别再为了iOS新系统设备而重新安装一个新版Xcode了.其实我们可以添加版本支持

    众所周知,Xcode7.3的代码补全是有问题的  如导入自定义类之后,在代码中并不会补全相应的类名... 但Xcode7.2是没有这个问题的,但很多时候我们自己的设备都升级到了iOS9.3.X系统,导 ...

  9. 将自己库添加Cocoapods支持

    给库添加Cocoapods支持, 使这个工具使用起来更加方便, 更好的使用Cocoapods, 助力iOS程序开发, 下面进入正题, 想要实现这个过程, 绝对不虚此读. 首先写好一个要添加Cocoap ...

随机推荐

  1. php solr 扩展

    安装php的solr扩展 下载地址: http://pecl.php.net/get/solr windows下载地址: http://downloads.php.net/pierre/php_sol ...

  2. Octopus系列之开发中灵光点收集,先放到这里,后面会整理的

    项目中引用的组件 1.System.Data.SQLite.dll 自行编译 SQLite-1.0.66.0-source 3.5的框架:F:\Code\开源项目\SQLite\1.0.66.0_x8 ...

  3. ext DateTime.js在ie下显示不全

    问题: ext在使用DateTime.js的时候会出现在日期控件在ie下显示不完成.如图  少了底部的“今天按钮”. 解决方法: 在ext/ux/form/DateTime.js (我的是这个路径,根 ...

  4. POJ 3660

    233333... Description: 就是说呢.牛是的实力室友大小之分的.然后呢.告诉你很多pair 表示任意两头牛之间的实力大小.按实力排序之后.问你一共有多少只牛的排名是确定了的. T_T ...

  5. IoTimerInLineHook

    #ifndef CXX_IOTIMERINLINEHOOK_H # include "IoTimerInlineHook.h" #endif ULONG32 SSDT_NtOpen ...

  6. 使用System.Timers.Timer类实现程序定时执行

    使用System.Timers.Timer类实现程序定时执行 在C#里关于定时器类有3个:System.Windows.Forms.Timer类.System.Threading.Timer类和Sys ...

  7. Android窃取用户信息新思路

    0×01 我们能得到哪些android手机上的app敏感信息手机上的app敏感信息◦通讯录,通讯记录,短信◦各种app的帐号密码,输入信息资料等◦各种影音资料,照片资料◦等等0×02  我们有哪些方法 ...

  8. hihocoder 1138 Islands Travel dijkstra+heap 难度:2

    http://hihocoder.com/problemset/problem/1138 很久不用最短路,几乎连基本性质也忘了,结果这道题就是某些最短路算法空间复杂度是o(n) 这里总结四种算法 算法 ...

  9. ZOJ 3646 Matrix Transformer 二分匹配,思路,经典 难度:2

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4836 因为要使对角线所有元素都是U,所以需要保证每行都有一个不同的列上有U,设 ...

  10. MATLAB中mexFunction函数的接口规范(转载)

    MEX文件的调用极为方便,其调用方式与MATALAB的内建函数完全相同,只需要在命令窗口内输入对应的文件名称即可. C语言MEX程序代码文件有计算子例程(Computational routine)和 ...