- 主题:请问一个数据库索引的问题 (转载)
不需要里面乱七八糟的功能。我只要索引即可。而且现有的db各种动作不可控。
【 在 mango7788 的大作中提到: 】
: 如果是这样的话,那更应该用一个成熟的啊
--
FROM 117.133.52.*
多谢。我去找找看。我目前想用跳表来实现。跳表支持重复键值比较好处理。
跳表读不如b+树。但是b+树再写入的时候不如跳表快,而且支持重复键值比较麻烦也浪费空间。
【 在 ylh0315 的大作中提到: 】
: 以前有一个ISAM(Index Sequence Access Method),能完成你这个工作,我用过。
: 多用户并发,完全的B+树索引。
: 支持多个索引,每个索引可以多个部分组成,每个部分可以分别按增序或降序排序。每个索引都可以是唯一或不唯一。
: ...................
--
FROM 117.133.52.*
不想用现成的数据库。否则直接用rocksdb了。我这个要求非常简单,没有数据库里那么多的功能需求。
【 在 ylh0315 的大作中提到: 】
: 省事就用个数据库。
--
FROM 111.196.134.*
berkelydb gnudb ....
有很多这样简单的key-value数据库
【 在 chunhui 的大作中提到: 】
: 不想用现成的数据库。否则直接用rocksdb了。我这个要求非常简单,没有数据库里那么多的功能需求。
--
FROM 23.104.213.*
我不是找这样的数据库,我是想知道他们的实现方式。否则可以直接用rocksdb。
目前基本确定用跳表。跳表挂上重复的键值相对简单一点。b+树如何支持重复键值,搜的资料都一笔带过。说是用overflow page。而且这个办法浪费空间。。。。
【 在 Madlee 的大作中提到: 】
: berkelydb gnudb ....
: 有很多这样简单的key-value数据库
--
修改:chunhui FROM 111.196.134.*
FROM 111.196.134.*
跳表可以这么做。B+树这么挂的话,和跳表就没什么区别了。
【 在 ylh0315 的大作中提到: 】
: 节点挂链表。
--
FROM 123.112.135.*
不同的key没问题啊。说的是同一个key下有多个值。
【 在 ylh0315 的大作中提到: 】
: 理论上可以再挂B+树,按不同的key排序。
--
FROM 123.112.135.*
我的需要是查找的时候把同一个key的多个值一下都读出来。这样的话,第二层树其实有点浪费,因为这一层本不需要查找。
【 在 ylh0315 的大作中提到: 】
: 对。第一层树是一个key,这个key相同了,在用下一个key做第二层树。
--
FROM 123.112.135.*
是的,链表可以。
【 在 ylh0315 的大作中提到: 】
: 那就链表呗。
--
FROM 111.196.134.*
【 在 chunhui 的大作中提到: 】
: 我的需要是查找的时候把同一个key的多个值一下都读出来。这样的话,第二层树其实有点浪费,因为这一层本不需要查找。
所谓二层不就是secondary db吗, 也就是次索引。
berkeley db里面, 次级索引就是一个二级表而已, 至于浪不浪费也得看需求吧, 即便现在没需求,
也得要考虑以后会不会扩展。
实现上, 就是B+数的磁盘表示, 根据内容大小, 把硬盘空间分页,页满了,B+树也是动态扩展。
--
FROM 124.126.1.*