我想知道有人遇到过这个:
通过 AQL 插入文档时,我可以轻松杀死我的 arango 服务器。例如
FOR i IN 1 .. 10
FOR u IN users
INSERT {
_from: u._id,
_to: CONCAT("posts/",CEIL(RAND()*2000)),
displayDate: CEIL(RAND()*100000000)
} INTO canSee
Run Code Online (Sandbox Code Playgroud)
(其中用户包含 500000 个条目),会发生以下情况
好吧,我正在创建很多条目,并且 AQL 可能会以批量执行的方式实现。通过 db.save 方法进行写入时,它可以工作,但速度要慢得多。
另外我怀疑这可能与预写缓存填满有关。
但是,有什么办法可以解决这个问题吗?将大量条目写入数据库不一定会杀死它。
日志说
DEBUG [./lib/GeneralServer/GeneralServerDispatcher.h:411] shutdownHandler called, but no handler is known for task
DEBUG [arangod/VocBase/datafile.cpp:949] created datafile '/usr/local/var/lib/arangodb/journals/logfile-6623368699310.db' of size 33554432 and page-size 4096
DEBUG [arangod/Wal/CollectorThread.cpp:1305] closing full …Run Code Online (Sandbox Code Playgroud) 我是Arango DB的新用户,我目前正在为我的项目进行评估.有人可以告诉我,您可以在Arango DB中创建的最大数据库数是多少?
谢谢.
我正在开发一个文档管理软件,我正在评估存储和搜索数据的noSql数据库.
总结当项目在目录和子目录中组织时,软件就像文件系统一样.
树的每个项目都可以有n个属性用于过滤和排序.
物品也可以最终与某种其他关系(父母除外)相互联系.
项目数量可能相对较大(数百万),并且应用程序的杀手级功能必须在检索数据(使用过滤器和按属性排序)方面具有恒定的性能,而不依赖于数据库增长.
我需要3个关键功能:
获取文件夹的直接子项.结果必须是每个文档属性的可分页,可排序和可过滤的
获取文件夹的所有子项(子树的所有项).结果必须是每个文档属性的可分页,可排序和可过滤的
获取文件夹的所有父母
我是noSql中的新手,实际上我使用的是rdbms(Sql Server),但我遇到了性能问题以及由文档属性的固定架构引起的所有限制.我正在评估OrangoDb或OrientDb,因为我认为它的功能(面向文档和面向图形)可能是我设计需求的最佳解决方案.
你能帮助我,给我一个关于设计数据库和查询这个3任务的建议吗?
铌.我需要查询的结果返回一个数据集,其中包含每个属性的列:
Es. doc1: p1: v1, p2: v2
doc2: p1: v1, p3: v3
result:
name | p1 | p2 | p3
doc1 v1 v2 null
doc2 v1 null v3
Run Code Online (Sandbox Code Playgroud)
我在想设计一个项目:
{
"_id": "_myItemId",
"name`enter code here`" : "Item1",
"itemType": "root / folder / file"
"parentItemId": "",
"properties" : [
{ name: "Property1", formatType: 0, formatMask: "", value: "Value1" },
{ name: "Property2", formatType: 0, formatMask: "", value: "Value2" }, …Run Code Online (Sandbox Code Playgroud) {
"batters":
{
"batter":[
{ "id": "1001", "type": "Regular" },
{ "id": "1002", "type": "Chocolate" },
{ "id": "1003", "type": "Blueberry" },
{ "id": "1004", "type": "Devil's Food" }
]
},
"topping":[
{ "id": "5001", "type": "None" },
{ "id": "5002", "type": "Glazed" },
{ "id": "5005", "type": "Sugar" },
{ "id": "5007", "type": "Powdered Sugar" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5003", "type": "Chocolate" },
{ "id": "5004", "type": "Maple" }
]
}
Run Code Online (Sandbox Code Playgroud)
基本上要在这里进行全文搜索,我需要对"batters.batter"以及"batters.topping"进行索引,即两个属性.如何处理这种全文搜索.请解释一下该方法,我将通过REST …
不太复杂:我想计算每个文档的边缘并将数字保存在文档中。我提出了两个有效的查询;不幸的是,因为我有数百万条边,所以两者都非常慢。是否有一种更快的方法来使用存储边数的属性来更新文档?(只是某个时间点的计数)
功能正常但速度缓慢的 AQL 查询:
FOR doc IN Documents
LET inEdgesCount = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'inbound', maxDepth:1})
LET outEdgesCount = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'outbound', maxDepth:1})
UPDATE doc WITH {inEdgesCount: inEdgesCount, outEdgesCount: outEdgesCount} In Documents
Run Code Online (Sandbox Code Playgroud)
或者:
FOR e IN Edges
COLLECT docId = e._to WITH COUNT INTO counter
UPDATE SPLIT(docId,'/')[1] WITH {inEdgeCount: counter}
Run Code Online (Sandbox Code Playgroud)
(然后对出站边缘重复)
顺便说一句,有什么方法可以查看查询速度(例如每秒执行 FOR 的次数)或完成百分比吗?我一直试图通过使用有限的查询来判断速度,但所需的时间似乎并不是线性扩展的。
我可以返回类似以下内容吗?
{
"c/12313" = 1,
"c/24223" = 2,
"c/43423" = 3,
...
}
Run Code Online (Sandbox Code Playgroud)
来自 AQL 查询?这个想法是这样的(这个非工作代码):
for c in my_collection
return { c._id : c.sortOrder }
Run Code Online (Sandbox Code Playgroud)
sortOrder我的文件中的一些财产在哪里?
我_rev在 ArangoDB 中创建的每个文档中都看到了 ,但我还没有看到有关使用这些修订来访问文档的更改历史记录的任何信息。更具体地说,如何查询特定文档的修订历史记录,以便及时查看以前的版本甚至特定版本?
我正在尝试使用用户定义的键创建文档,如下所示:
package main
import (
"fmt"
driver "github.com/arangodb/go-driver"
"github.com/arangodb/go-driver/http"
)
type doc struct {
_key string `json:"_key"`
}
func main() {
conn, _ := http.NewConnection(http.ConnectionConfig{
Endpoints: []string{"http://localhost:8529"},
})
c, _ := driver.NewClient(driver.ClientConfig{
Connection: conn,
Authentication: driver.BasicAuthentication("root", "test"),
})
db, _ := c.CreateDatabase(nil, "dbname", nil)
// delete the collection if it exists; then create it
options := &driver.CreateCollectionOptions{
KeyOptions: &driver.CollectionKeyOptions{
AllowUserKeys: true,
},
}
coll, _ := db.CreateCollection(nil, "collname", options)
meta, _ := coll.CreateDocument(nil, doc{ _key: "mykey" })
fmt.Printf("Created document with …Run Code Online (Sandbox Code Playgroud) 以下查询执行大约需要20秒:
FOR p IN PATHS(locations, connections, "outbound", { maxLength: 1 }) FILTER p.source._key == "26094" RETURN p.vertices[*].name
Run Code Online (Sandbox Code Playgroud)
我相信这是一个简单的查询(并且数据库不是那么大)它应该执行得相当快......我必须做错了...这是查询结果:
==> [object ArangoQueryCursor - count: 286, hasMore: false]
Run Code Online (Sandbox Code Playgroud)
该locations(顶点)集合有23753页的文件,以及connections(边)收藏有123414页的文件.
我也尝试过滤,_id但性能有点相同.
我能做些什么来获得更好的表现吗?
这是查询的.explain()报告:
{
"plan" : {
"nodes" : [
{
"type" : "SingletonNode",
"dependencies" : [ ],
"id" : 1,
"estimatedCost" : 1,
"estimatedNrItems" : 1
},
{
"type" : "CalculationNode",
"dependencies" : [
1
],
"id" : 2,
"estimatedCost" : 2, …Run Code Online (Sandbox Code Playgroud) 如果我没有错,在插入新文档时,ArangoDB不关心对象属性的顺序/顺序,有没有办法保证属性的顺序与它们在json对象中声明的顺序相同?