我正处于为 C++ 设计一个基于图形(或键值)的数据库库的准备阶段,这里的许多人会发现它类似于http://neo4j.org/等项目。
由于这是设计的一个非常早期的阶段,我的要求很简单,未提炼并且(我承认)可能仍然相当幼稚:
- 有向无环图
- 树状结构,少根多叶
- 分支可能包含对其他分支的引用
- 但是没有循环
- 该图由键值对表示,其中键和值大部分是简单类型(整数),但有些可能指的是更复杂的类型,例如字符串
- 查询
- 简单查询通常会返回边。即从这个根开始的边缘对应于(键/值/键值元组)?
- 使用键字符串(键、键、键、值)的查询
- 访问模式和性能
- 应强调快速查找
- 添加边缘
- 但是没有从图中删除边/节点。即图表会增长,但永远不会缩小。
- 可以在图上执行优化,以优化缓存使用的内存布局
- 图表的大小约为 1 MB - 2 GB,并且大部分应该适合主内存
鉴于这些粗略的要求是一项挑战,您主要关心的是:
- 内存存储:布局、分配
- 例如,固定大小的块池?
- 通过聚类算法分配内存?
- 快速查询
- 动态重组
- 如何处理边/节点的添加?
- 优化更新(例如改进内存布局)
- 并发访问
- 例如,通过优化线程处理对内存布局的更改?
我正在寻找工作的良好起点,因此我很高兴收到对现有工作的参考。最重要的是:我应该考虑哪些我没有考虑的事情?