【问题标题】:arangodb: performance impact of document sizearangodb:文档大小对性能的影响
【发布时间】:2017-12-21 08:51:21
【问题描述】:

文档结构

-user
  - firstName
  - lastName
  ...
  - session
     - table1
         - filters, searches, states etc
     - table2
         - filters, searches, states etc
     ...

问题:我应该将会话数据保存在用户文档中还是单独的文档中?

如果用户登录,我们查询整个文档:

query = 'find the user... return u 

如果用户注销,我们会保存用户,包括其会话状态

如果显示用户列表,我们只查询所需的文档字段:

query = 'for u in users.... return 
{firstName: u.firstName, lastName: u.lastName}

思考:虽然我们只查询我们需要的数据,但文档的大小会影响后台的数据库性能吗?就像 Arangodb 会在后台获取整个文档,然后只返回其中的一部分?或者任何其他受较大文档大小影响的服务器进程?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    ArangoDB 获取完整文档。您应该避免使用大型文档以获得最佳性能。你可以看here一个如何从 RocksDB key-value-store 接收文档的例子

    【讨论】:

      【解决方案2】:

      会话数据需要与用户关联,因此将其存储在用户顶点上可能更有意义,否则您可以存储在单独的顶点上并引用它(图中的边)。对于经常根据请求为用户提供服务的用户,缓存用户数据可能会被证明是有效的,而不是每次都查询数据库。

      如果用户处于活动状态,您可以将会话放置在缓存等中间存储中,以便更快地访问,您可以稍后在他注销时或在指定的时间间隔将其写入数据库。

      在文档大小不断增加的情况下,您可以只考虑最近的n 会话数(这取决于您的应用程序域和业务需求),因为用户的偏好会不断变化,以包含每个文档的大小。

      是的,在 arango 查询的情况下,在查询优化器应用索引和其他优化之前获取整个文档,这会影响性能。

      【讨论】:

        猜你喜欢
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-20
        • 2011-10-05
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多