我们已向orientdb插入1500万条记录,以进行大量数据查询性能测试。
系统配置:Linux,2Cpu和4GB Ram
var X;
for(var i=1;i<15000000;i++)
{
X='insert into customer set id='+i+',name=\'SENTHIL'+i+'\',age='+i;
db.command(X);
}
在尝试获取记录的情况下,如下所示,我们的响应速度很慢
select count(age) from customer where age > 100000 and age < 999999
查询在7.652秒内执行
select count(age) from customer where age > 1000000 and age < 9999999
查询执行时间为183.465秒。
explain select count(age) from customer where age > 1000000 and age < 9999999
+ FETCH FROM INDEX customerAge
age > 1000000 and age < 9999999
+ EXTRACT VALUE FROM INDEX ENTRY
filtering clusters [25,26,27,17,16,19,18,21,20,23,22,24,15]
+ FILTER ITEMS BY CLASS
customer
+ CALCULATE PROJECTIONS
age AS _$$$OALIAS$$_1
+ CALCULATE AGGREGATE PROJECTIONS
count(_$$$OALIAS$$_1) AS _$$$OALIAS$$_0
+ GUARANTEE FOR ZERO COUNT
+ CALCULATE PROJECTIONS
_$$$OALIAS$$_0 AS `count(age)`
我们如何解决反应迟钝的问题?
答案 0 :(得分:0)
我对OrientDB的第一印象是相似的。 DB似乎比常规的关系数据库更差。在对经过改进的查询进行了模拟RDBMS行为的实验之后,我逐渐摆脱了“关系思维”。
对我来说,OrientDB的好处是在重组数据后出现的。在处理与时间相关的数据时,我决定首先创建一个功能强大的搜索框架:时间图(https://github.com/topofocus/orientdb_time_graph)。通过将结构化和非结构化数据分配给网格,只要我对时间表有所了解,我就能非常快速地访问任何内容。猜测越好,响应越快。
我学到的东西:在图形数据库中然后在关系数据库中很好地组织数据甚至更重要。
为减少响应时间,我建议在输入过程中对数据进行聚类,将小年龄类归为小类,等等。结果,您始终可以对孔数据集进行查询(从客户中选择),但是如果您知道子类的年龄边界,则您(或者更好的是:数据库引擎)可以专注于此。