假设我的 Couchbase DB 有数百万个用户对象,每个用户对象都包含一些原始字段(分数、余额等)
并假设我在每个服务器请求上读取和写入大部分字段。
我看到在 Couchbase 中存储 User 对象的 2 个选项:
- 映射到用户 key 的单个 JSON 对象(例如 user_555)
- 将每个字段映射到单独的条目(例如 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/