gStore/NOTES.md

4.4 KiB
Raw Blame History

TODO

  • full_test中捕捉stderr信息重要信息如时间结果应该确保是标准输出结果第一行是变量名有select *时应该和jena分列比

  • record the usage of Virtuoso and Sesame(maybe change their source code to be used by full_test)

  • 查询控制器+数值型查询局部和整体的区别一个查询中是否允许同时包含数值和非数值应该考虑全局编码还是拆分后均用B+树的范围查询)

  • 完成毕业论文(图数据库查询器优化),第一部分应给出介绍和运行框架图,之后对每个部分的功能作简单说明,重点阐述自己设计/改进的模块


TEST

using multi-join and stream, compared with jena

gstore performs worser than jena in these cases:

bsbm series: self1.sql, sellf3.sql, self8.sql (self4,5,6)

dbpedia series: q3.sql, q4.sql, q5.sql (q9.sql)

lubm series: q0.sql, q2.sql, q13.sql, q16.sql

watdiv series: C1.sql, F3.sql


DEBUG


BETTER

  • 在index_join中考虑所有判断情况、一次多边、交集/过滤等等multi_join不动

  • 在join时两个表时有太多策略和条件对大的需要频繁使用的数据列可考虑建立BloomFilter进行过滤

  • not operate on the same db when connect to local server and native!

  • VStree部分的内存和时间开销都很大测试gstore时应打印/分析各部分的时间。打印编码实例用于分析和测试,如何划分或运算空间(异或最大或夹角最大,立方体,只取决于方向而非长度)


DOCS:


WARN

重定义问题绝对不能忍受,现已全部解决(否则会影响其他库的使用,vim的quickfix也会一直显示 类型不匹配问题也要注意尽量不要有SparqlLexer.c的多字节常量问题 变量定义但未使用对antlr3生成的解析部分可以不考虑文件太大自动生成影响不大 以后最好使用antlr最新版支持C++的来重新生成基于面向对象防止与Linux库中的定义冲突 (目前是在重定义项前加前缀)


KEEP

  • always use valgrind to test and improve

  • 此版本用于开发最终需要将整个项目转到gStore仓库中用于发布。转移时先删除gStore中除.git和LICENSE外的所有文件然后复制即可不要复制LICENSE因为版本不同也不用复制NOTES.md因为仅用于记录开发事项

  • build git-page for gStore

  • 测试时应都在热启动的情况下比较才有意义gStore应该开-O3优化且注释掉-g以及代码中所有debug宏

  • 新算法在冷启动时时间不理想即便只是0轮join开销也很大对比时采用热启动

  • 不能支持非连通图查询


ADVICE

  • 构造极小型RDF数据用于调试

  • 将KVstore模块中在堆中寻找Node*的操作改为用treap实现(或多存指针避开搜索?)

  • 尽量合并相似模块比如storage和LRUCache多处对heap的需要等等

  • 无法查询谓词因为VSTREE中只能过滤得到点的候选解如果有对边的查询是否可以分离另加考虑。

  • ->constant->B被视为不连通图不处理是否可以在中修改使得到结果select ?v0 where { ?v1 ?v2 . }

  • Can not operate on the same db when connect to local server and native!

  • auto关键字和智能指针

  • 实现内存池来管理内存?

  • 在BasicQuery.cpp中的encodeBasicQuery函数中发现有pre_id==-1时就可以直接中止查询返回空值

  • 能不能不用转换到表连接来获得结果,目前只相当于用图算法做了一遍预处理!

  • join可以不按照树序考虑评估每两个表的连接代价

  1. 用机器学习(对查询分类寻找最优,梯度下降,调参)评估深搜顺序的好坏
  2. 压缩字符串:整体控制是否启动(比如安装时),同时/不同时用于内存和硬盘。对单个string根据结构判断是否压缩一个标志位关键词映射string相关操作主要是比较相关压缩算法必须有效且不能太复杂
  3. 实现对谓词的查询(再看论文)
  4. 将查询里的常量加入变量集否则可能不连通而无法查询也可能影响join效率。如A->c, B->c本来应该是通过c相连的子图才对但目前的gstore无法识别。