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

kingstarer 2011-12-16 11:27:12
要将一些key,value数据存放在文件中,支持快速查询,支持增,删,改

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

希望实现简单,效率又不要太低
...全文
140 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingstarer 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 demon__hunter 的回复:]
引用 5 楼 kingstarer 的回复:
引用 2 楼 demon__hunter 的回复:
c++ std::map
里面用红黑树实现的 O(log n)时间内做查找,插入和删除 应该可以吧

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

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

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

数据太大了 放不到内存

不放数据库,是因为数据库主机压力太大了。 不得不拆分部分功能自己实现
qq120848369 2011-12-16
  • 打赏
  • 举报
回复
要持久化的话,nosql... 任何一款产品都可以满足..

如果单纯是个缓存层,可以用memcached。
mLee79 2011-12-16
  • 打赏
  • 举报
回复
标准做法 B+ , 前几级索引放内存...
机智的呆呆 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kingstarer 的回复:]
引用 2 楼 demon__hunter 的回复:
c++ std::map
里面用红黑树实现的 O(log n)时间内做查找,插入和删除 应该可以吧

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

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

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

目前想到的方法是放弃原空间,重……
[/Quote]
操作是在内存里,需要做一个 map内存<-->文件 序列化/反序列化的操作
shayla 2011-12-16
  • 打赏
  • 举报
回复
楼主怎么不考虑直接用数据库
shayla 2011-12-16
  • 打赏
  • 举报
回复
继续关注
内存中的方法貌似都不适用。是不是可以研究SQLite源代码看看。
kingstarer 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 demon__hunter 的回复:]
c++ std::map
里面用红黑树实现的 O(log n)时间内做查找,插入和删除 应该可以吧
[/Quote]
红黑数在文件里面不好实现吧?(数据量比较大,放不进内存)

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

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

目前想到的方法是放弃原空间,重新申请空间,但是这样在修改删除操作时比较浪费空间
================================
各位有没有好的解决方法 或者有没有更好的数据结构?
薛定谔之死猫 2011-12-16
  • 打赏
  • 举报
回复
INI或Properties文件就是这么实现的,可以参考下开源实现,不过要快速只有通过载入内存操作,定时回写到文件~

glib中的hashtable就可以作为内存操作的数据结构的
机智的呆呆 2011-12-16
  • 打赏
  • 举报
回复
一楼 木有了
机智的呆呆 2011-12-16
  • 打赏
  • 举报
回复
c++ std::map
里面用红黑树实现的 O(log n)时间内做查找,插入和删除 应该可以吧
taodm 2011-12-16
  • 打赏
  • 举报
回复
建议楼主放弃自己做的想法。
专业公司不是吃干饭的。没有受过专项训练的人自己做一般只会差,而且是差太多。
gw_net 2011-12-16
  • 打赏
  • 举报
回复
xml file
qq120848369 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 kingstarer 的回复:]

引用 13 楼 luciferisnotsatan 的回复:
引用 11 楼 kingstarer 的回复:

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

红黑数在文件里面……
[/Quote]

你是打算持久化数据还是做缓存?

是为了什么目的用key-value?

介绍一下使用环境吧。
kingstarer 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 luciferisnotsatan 的回复:]
引用 11 楼 kingstarer 的回复:

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

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

我现在想采hash……
[/Quote]
数据量大 放不到内存

sqlite网上看过介绍,适合百万数据下,并且不支持并发查询

我要保存的是千万级的key,value信息


网上有现成的nosql产品,不过我还是想看看自己做的简单key,value能不能适用

如果能的话当然是自己做的好一些,毕竟心里有底
luciferisnotsatan 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kingstarer 的回复:]

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

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

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

但是不知道修改……
[/Quote]
自己给map写个allocator
bobye1230 2011-12-16
  • 打赏
  • 举报
回复
sqlite这种小型数据库,对主机的压力应该不是太大把

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧