| 明论 |
|
|||
|
公告
日历
统计
导航 |
最新评论Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) coffeestone 2011-06-30 21:28
实际上,什么时候会用Parent?
只有遍历,插入,删除的时候才会用到Parent。
另外,你的RBTree的规模会有多大?据我所知,目前RBTree的规模很难超过128层,对于128层的RBTree,至少有2^64个节点,这个数据规模是很大的。因此,我建议在插入、删除的时候可以暂时将parent节点放在一个临时数组中就可以了。
如果需要具体实现的话,等我把公司里的数据结构剔除后可以share出来。哈哈。
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) konyel 2011-06-24 23:30
@coffeestone
确实在查找中parent是多余的,但是临时保存的parent增加的大量的程序复杂度,所以权衡一下还是要加上。
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) coffeestone 2011-06-24 22:43
parent节点是可以从结构中拿掉的,这样可以节省很多内存,尤其在64-bit机器上体现的更明显。parent可以通过栈数据结构重新获得。
毕竟,search也好,插入、删除也好,都要从根节点找到你的操作节点,利用这个过程,可以把所有的父节点恢复出来。
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) konyel 2011-06-24 14:22
@sunriseyuen
内存放的不是数据,是索引,一般的服务器10几G内存很常见,1000W 8位INT的索引值如文章所说,只有200多M,加上使用内存池,都是无碎片的密集排列,占用资源极小。
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) sunriseyuen 2011-06-24 12:12
个人感觉用sqlite已经足够,如果超出1000W数据很卡是一个事实,那么将1000W的数据放入内存似乎也不是一个好的处理方式。
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) 麦舒 2011-06-24 11:57
不错,有人研究这个。
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) 大石头 2011-06-24 11:55
我就想把SQLite放到内存中
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) sunriseyuen 2011-06-24 10:28
想将超过1000W的数据放到内存中?
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) konyel 2011-06-24 10:00
@sunriseyuen
sqlite适合小型应用,用它处理大数据量,超过1000W很多机器都会卡死,
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) sunriseyuen 2011-06-24 09:49
何必开发一个呢,sqlite不是已经很好了吗
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) 潇湘隐者 2011-06-23 22:08
先收藏了,慢慢看!
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) 阳光明媚Ryan 2011-06-23 21:07
好啊。。。。。
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) 海南.胡勇 2011-06-23 21:02
好美呀,支持。
Re:内存数据库内核开发 工作日志(初稿)(三) 阳光明媚Ryan 2011-06-23 21:00
好东西~最近在做实时数据库~ 顶啊
Re:内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十) mwylaoma 2011-06-23 20:52
研究中...
Re:内存池完整实现代码及一些思考 konyel 2011-06-07 09:41
@eaglet
多谢指教 内存申请和释放的单元并不是MemoryBlock,而是代码里的Uint,MemoryBlock已经是大块连续的内存区域,这些Block体积可以设置的比较大,只要在寻址范围内都可以,所以一个池里只会有为数不多的MemoryBlock,如初始化所示,一个MemoryBlock默认可以1024放置这么多的内存单元,当然根据CPU的取指能力还可以大大的增加,MemoryBlock是申请和释放不是一个频繁发生的概率,而Uint的申请释放为O(1)
Re:内存池完整实现代码及一些思考 eaglet 2011-06-07 08:12
你的代码中那个 while 循环遍历链表的方法效率不是很高,分配和释放内存应在 O(1) 的时间复杂度内完成。采用空闲队列来分配和释放内存可以不用遍历链表,O(1)的时间复杂度,效率比你这个要高很多。另外你内存块全部是new 出来的,如果块比较小,这种 new 将在堆中留下大量的碎片,建议用大块连续内存来存放小的内存块,自己来管理这些内存块,而不是交给堆去处理。
Re:内存池完整实现代码及一些思考 konyel 2011-06-06 19:30
@egmkang
tcmalloc链表结构比较繁复,不利于内存监控,所以自己实现了,用于程序框架底层。
Re:内存池完整实现代码及一些思考 egmkang 2011-06-06 17:46
为什么不考虑使用现成的内存池,而是自己写一个呢?
tcmalloc你可以尝试一下
Re:内存池完整实现代码及一些思考 博客园团队 2011-06-06 16:51
建议优化一下排版,给代码加上着色。
|
![]() |
|
| Copyright © konyel | Powered by: 博客园 模板提供:沪江博客 |