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

arangodb: performance impact of document size

文档结构

-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 在仅返回部分文档之前在后台获取整个文档一样吗?或者可能受更大文档大小影响的任何其他服务器进程?

ArangoDB 获取完整文档。为了获得最佳性能,您应该避免使用大型文档。您可以查看 here 如何从 RocksDB 键值存储接收文档的示例

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

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

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

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