【问题标题】:Write speed difference写入速度差异
【发布时间】:2019-06-21 20:45:32
【问题描述】:

我正在 arangoDB 上做一些测试,在使用 web UI 时,我想测试 500000 文档的插入速度 我在web UI中使用了这个查询,代码是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 驱动程序足够熟悉,可以详细说明这是为什么?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    你正在做不同的事情。您在 UI 中的查询或多或少只向服务器触发一个 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(&lt;path to file&gt;)中执行。

    可能的输出:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      相关资源
      最近更新 更多