json - Couchbase - 将 JSON 对象拆分为许多键值条目 - 性能改进?

标签 json performance couchbase

假设我的 Couchbase DB 有数百万个用户对象,每个用户对象都包含一些原始字段(分数、余额等)
并假设我在每个服务器请求上读取和写入大部分字段。

我看到在 Couchbase 中存储 User 对象的 2 个选项:

  1. 映射到用户 key 的单个 JSON 对象(例如 user_555)
  2. 将每个字段映射到单独的条目(例如 Score_555 和 Balance_555)

选项 1 - 单个 CB 查找、JSON 解析
选项 2 - 两次查找,减少解析(如果有)

如何判断哪一个在性能方面更好?
如果我有 3 个字段怎么办?如果是4呢?这有什么区别吗?

谢谢

埃亚尔

最佳答案

首先考虑您的数据结构和访问模式,然后再担心 json 解析或额外的查找是否会增加系统的开销。

从我的角度和经验来看,我会尝试根据逻辑对象分组对文档进行建模,我会将“用户”属性存储在一起。如果您要单独存储每个字段,如果您想向客户或服务提供玩家个人资料的完整概述,则必须进行一系列查找。

我使用Couchbase作为社交手机游戏的主要数据存储,我们将90%的用户数据存储在用户文档中,其中包含所有相关字段,例如分数,级别,进度等。对于大多数人来说诸如新分数或升级之类的操作,我们希望在应用程序层中处理整个 User 对象,因此从 cb 文档中扩充 user 对象,更改/读取我们需要的内容,然后再次保留它(如果有)是有意义的已更改。

我们唯一一次对其他文档进行 id 引用是在玩家购买的形式中,其中我们有一个 id 数组,每个 id 引用一个单独的购买。我们这样做是因为我们希望获得有关每次购买的更丰富的信息(交易日期、交易 ID、产品类型等),这些信息与用户文档无关,因为当购买时我们会验证其合法性,然后将其添加到用户中库存并创建单独的采购凭证。

所以我们的结构是:

用户文档:

-特定于用户的字段(分数、级别、进度、 friend 、库存)

-指向特定购买的 IDS 数组

我唯一会考虑按照上面概述的方式拆分一些特定字段,如果您的用户文档变得非常大,但我认为最好按数据分组而不是特定字段来划分文档。

希望有帮助!

关于json - Couchbase - 将 JSON 对象拆分为许多键值条目 - 性能改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24241089/

相关文章:

Couchbase N1QL 联接查询

javascript - 使用维基百科的 API 从搜索查询中获取结果

mysql - 扩展 MySQL 数据库,提高许多连接的性能

python - 使用来自 ajax 响应的嵌套值导航 Python 字典

JavaFX 与较大的 Canvas 尺寸存在巨大的滞后

MySQL 十进制列 ORDER BY 查询索引

linux - 无法在非 root sudo 中启动 couchbase server 2.2.0

javascript - 如何从 : SQL Query to Couchbase NoSQL? 转换 RegEx sql 查询

java - java中如何将json文件解析为json对象

json - 如何在 Ruby 中访问此 JSON API 数据?