我正在arangoDB上进行一些测试,并且当使用Web UI时,我想测试500000个文档的插入速度 我在网络用户界面中使用了此查询,代码为here
FOR x IN 1..500
FOR i IN 1..1000
INSERT {'name': 'hello' ,'age': i } INTO users
这在我的机器上大约需要9秒钟。但是,当我使用Python Arango驱动程序时,每1000次插入大约需要1.9秒。
是否有足够熟悉python驱动程序的人来详细说明为什么?
答案 0 :(得分:1)
您正在做不同的事情。用户界面中的查询只会向服务器触发一个或多个http请求。当您在循环中运行插入时,您将对每个项目执行一个http请求。如果您不想使用AQL,则仍然可以在一个请求中发送多个文档。要了解一个想法,请看以下代码:
( () => {
const internal = require("internal")
const db = internal.db
const time = internal.time
const print = internal.print
let start_time = undefined
let col = undefined
const col_name = "users"
// one http request
print("aql insert")
db._drop(col_name)
col = db._create(col_name)
start_time = time()
db._query(`
FOR x IN 1..50
FOR i IN 1..1000 INSERT
{'name': 'hello' ,'age': i }
INTO ${col_name}
`)
print(time() - start_time)
// one request for every document
print("rest insert")
db._drop(col_name)
col = db._create(col_name)
start_time = time()
for(var x = 1; x <= 50; x++) {
for (var i = 1; i <= 1000; i++) {
col.insert({ name: 'hello', age: i})
}
}
print(time() - start_time)
// 50 http requests
print("rest batched insert")
db._drop(col_name)
col = db._create(col_name)
start_time = time()
let batch = []
for (var i = 1; i <= 1000; i++) {
batch.push({ name: 'hello', age: i})
}
for (var x = 1; x <= 50; x++) {
col.insert(batch)
}
print(time() - start_time)
})()
可以使用arangosh
在require("internal").load(<path to file>)
中执行代码。
可能的输出:
127.0.0.1:8529@_system> require("internal").load("/home/ulf/insert-example.js")
aql insert
3.2375659942626953
rest insert
13.451776504516602
rest batched insert
3.7614316940307617