首页 文章

arangodb:文档大小对性能的影响

提问于
浏览
1

文件结构

-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}

思考:虽然我们只查询我们需要的数据,但文档的大小是否会影响后台的DB性能?就像Arangodb在后台获取整个文档一样,只返回部分内容之前?或者可能是受更大文档大小影响的任何其他服务器进程?

2 回答

  • 2

    ArangoDB获取完整文档 . 您应避免使用大型文档以获得最佳性能 . 您可以看到here一个如何从RocksDB键值存储接收文档的示例

  • 1

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

    如果用户处于活动状态,您可以将会话放在缓存等中间存储中以便更快地访问,并且可以在他注销时或以指定的时间间隔将其写入db .

    如果文档的大小不断增加,您可以考虑最近的会话数量(取决于您的应用程序域和业务要求),因为用户首选项会发生变化,以包含每个文档的大小 .

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

相关问题