+ -
当前位置:首页 → 问答吧 → 想做一个以文件为存储介质的key,value系统,不知道有什么好思路

想做一个以文件为存储介质的key,value系统,不知道有什么好思路

时间:2011-12-16

来源:互联网

要将一些key,value数据存放在文件中,支持快速查询,支持增,删,改

不知道要用什么数据结构比较好

希望实现简单,效率又不要太低

作者: kingstarer   发布时间: 2011-12-16

该回复于2011-12-16 11:33:30被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#2楼 得分:0回复于:2011-12-16 11:35:02
c++ std::map 
里面用红黑树实现的 O(log n)时间内做查找,插入和删除 应该可以吧

作者: shayla   发布时间: 2011-12-16

一楼 木有了

作者: Demon__Hunter   发布时间: 2011-12-16

INI或Properties文件就是这么实现的,可以参考下开源实现,不过要快速只有通过载入内存操作,定时回写到文件~

glib中的hashtable就可以作为内存操作的数据结构的

作者: Demon__Hunter   发布时间: 2011-12-16

引用 2 楼 demon__hunter 的回复:
c++ std::map
里面用红黑树实现的 O(log n)时间内做查找,插入和删除 应该可以吧

红黑数在文件里面不好实现吧?(数据量比较大,放不进内存)

我现在想采hash来实现,用文件指针代替内存指针

但是不知道修改的时候怎么处理,因为修改value值,可能导致占用空间比原来的大。

目前想到的方法是放弃原空间,重新申请空间,但是这样在修改删除操作时比较浪费空间
================================
各位有没有好的解决方法 或者有没有更好的数据结构?

作者: mscf   发布时间: 2011-12-16

继续关注
内存中的方法貌似都不适用。是不是可以研究SQLite源代码看看。

作者: kingstarer   发布时间: 2011-12-16

楼主怎么不考虑直接用数据库

作者: shayla   发布时间: 2011-12-16

引用 5 楼 kingstarer 的回复:
引用 2 楼 demon__hunter 的回复:
c++ std::map
里面用红黑树实现的 O(log n)时间内做查找,插入和删除 应该可以吧

红黑数在文件里面不好实现吧?(数据量比较大,放不进内存)

我现在想采hash来实现,用文件指针代替内存指针

但是不知道修改的时候怎么处理,因为修改value值,可能导致占用空间比原来的大。

目前想到的方法是放弃原空间,重……

操作是在内存里,需要做一个 map内存<-->文件 序列化/反序列化的操作

作者: shayla   发布时间: 2011-12-16

标准做法 B+ , 前几级索引放内存...

作者: Demon__Hunter   发布时间: 2011-12-16

要持久化的话,nosql... 任何一款产品都可以满足..

如果单纯是个缓存层,可以用memcached。

作者: mLee79   发布时间: 2011-12-16

引用 8 楼 demon__hunter 的回复:
引用 5 楼 kingstarer 的回复:
引用 2 楼 demon__hunter 的回复:
c++ std::map
里面用红黑树实现的 O(log n)时间内做查找,插入和删除 应该可以吧

红黑数在文件里面不好实现吧?(数据量比较大,放不进内存)

我现在想采hash来实现,用文件指针代替内存指针

但是不知道修改的时候怎么处理,因为修改value值,可能导致占用空间比……


数据太大了 放不到内存

不放数据库,是因为数据库主机压力太大了。 不得不拆分部分功能自己实现

作者: qq120848369   发布时间: 2011-12-16