写速度差

时间:2019-06-21 08:53:01

标签: arangodb

我正在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驱动程序的人来详细说明为什么?

1 个答案:

答案 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)

})()

可以使用arangoshrequire("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