我已将数据以以下格式存储在arangoDB 2.7中:
{"content": "Book.xml", "type": "string", "name": "name", "key": 102}
{"content": "D:/XMLexample/Book.xml", "type": "string", "name": "location", "key": 102}
{"content": "xml", "type": "string", "name": "mime-type", "key": 102}
{"content": 4130, "type": "string", "name": "size", "key": 102}
{"content": "Sun Aug 25 07:53:32 2013", "type": "string", "name": "created_date", "key": 102}
{"content": "Wed Jan 23 09:14:07 2013", "type": "string", "name": "modified_date", "key": 102}
{"content": "catalog", "type": "tag", "name": "root", "key": 102}
{"content": "book", "type": "string", "name": "tag", "key": 103}
{"content": "bk101", "type": {"py/type": "__builtin__.str"}, "name": "id", "key": 103}
{"content": "Gambardella, Matthew", "type": {"py/type": "__builtin__.str"}, "name": "author", "key": 1031}
{"content": "XML Developer's Guide", "type": {"py/type": "__builtin__.str"}, "name": "title", "key": 1031}
{"content": "Computer", "type": {"py/type": "__builtin__.str"}, "name": "genre", "key": 1031}
{"content": "44.95", "type": {"py/type": "__builtin__.str"}, "name": "price", "key": 1031}
{"content": "2000-10-01", "type": {"py/type": "__builtin__.str"}, "name": "publish_date", "key": 1031}
{"content": "An in-depth look at creating applications with XML.", "type": {"py/type": "__builtin__.str"}, "name": "description", "key": 1031}
随着文档数量的增加,如1000、10000、100000、1000000、10000000等。平均查询响应时间随着文档数量的增加而增加,从0.2秒到3.0秒不等。我已经在该集合上创建了哈希索引。我的问题是,是否可以通过不增加文档数来减少这种情况。
另一方面,我还在内容组件上创建了全文本索引,在全文本搜索中也会发生同样的事情,响应时间从0.05秒到0.3秒不等。
所以告诉我有什么办法可以进一步减少这个时间。
请告诉我我们可以进一步减少响应时间吗?
不能在嵌套FOR
语句的第一级中使用索引。但是,从ArangoDB 2.8开始,您可以利用数组索引:
您查询的值是data.pname[*].name
,data.pname[*].type
因此让我们为它们创建索引:
db.DSP.ensureIndex({type:"hash", fields: ['data[*].type']});
db.DSP.ensureIndex({type:"hash", fields: ['data[*].name']});
现在让我们重新构造查询,以便可以利用该索引。我们从一个简单的版本开始进行实验,并使用explain重新验证它实际上是否使用了索引:
db._explain('FOR k IN DSP FILTER "modified_date" IN k.data[*].name RETURN k')
Query string:
FOR k IN DSP FILTER "modified_date" IN k.data[*].name RETURN k
Execution plan:
Id NodeType Est. Comment
1 SingletonNode 1 * ROOT
6 IndexNode 1 - FOR k IN DSP /* hash index scan */
5 ReturnNode 1 - RETURN k
Indexes used:
By Type Collection Unique Sparse Selectivity Fields Ranges
6 hash DSP false false 100.00 % [ `data[*].name` ]
("modified_date" in k.`data`[*].`name`)
因此,我们看到我们可以对数组条件进行过滤,因此您只需将要检查的文档放入内部循环即可:
FOR k IN DSP FILTER "modified_date" IN k.data[*].name || "string" IN k.data[*].type
FOR p IN k.data FILTER p.name == "modified_date" || p.type == "string" RETURN p
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句