2014-06-16 24 views
2

假设我的Couchbase数据库拥有数百万个用户对象,每个用户对象包含一些原始字段(分数,余额等)
并且说我读了&在每个服务器请求上写入了大部分这些字段。Couchbase - 将JSON对象拆分为许多键值条目 - 性能改进?

我看到存储在Couchbase用户对象的2种选择:

  • 映射每个字段映射到一个用户密钥

    1. 单个JSON对象(例如user_555)到一个单独的条目(例如score_555和balance_555)

    选项1 - 单CB查找,JSON解析
    选项2 - 两倍查找,如果任何

    解析少

    如何判断哪一个性能更好?
    如果我有3个字段会怎样?如果4?这有什么不同吗?

    感谢

    的Eyal

  • 回答

    4

    首先担心,如果JSON解析或额外的查询将增加开销到您的系统之前,想想你的数据结构和访问模式。

    从我的角度和经验来看,我会尝试基于逻辑对象分组对文档进行建模,我会将“用户”属性存储在一起。如果您要单独存储每个字段,则必须执行一系列查找,才能提供客户端或服务并全面了解播放器配置文件。

    我已经使用Couchbase作为社交手机游戏的主要数据存储,我们将90%的用户数据存储在用户文档中,其中包含所有相关字段,如分数,级别,进度等。我们希望处理应用程序层中的整个用户对象的操作(例如新分数或升级),因此从cb文档中充入用户对象,更改/读取我们需要的内容,然后在存在时再次保留它已经发生了变化。

    我们唯一有ID参考其他文件的形式是玩家购买的形式,我们有一个ID阵列,每个参考单独购买。我们这样做是因为我们希望获得与用户文档无关的每笔购买(交易日期,交易ID,产品类型等)的更丰富的信息,因为购买时我们验证它是合法的,然后添加到用户库存并创建单独的购买凭证。

    所以我们的结构是:

    UserDoc:

    -Fields特定于用户(得分,级别,进度,朋友,库存)指向特定购买

    IDS的

    -Arrays

    我只考虑拆分出一些特定的领域,如上所述,如果您的用户文档严重大,但我认为最好是按照数据分组划分文档,而不是特定字段。

    希望有帮助!

    +0

    你的UserDoc,字段和'外键'数组的例子正是我需要听到的,这是要走的路,而不是将我的对象分成许多条目... –

    +0

    真棒听!你能把它标记为接受的答案吗? :) – scalabilitysolved