riak - 如何在 Riak 中构建数据?

标签 riak

我想弄清楚如何在 Riak 中对数据建模.假设您正在构建类似 CMS 的东西有两个特点,新闻和产品。您需要能够为多个客户端 X 和 Y 存储此信息。您通常会如何构建此信息?

  • 每个客户一个桶,然后是两个关键的新闻和产品。在每个键下存储多个对象,然后使用 map/reduce 对它们进行排序。
  • 将新闻和产品存储在同一个存储桶中,但每个新闻项目和产品项目都有一个新的自动生成的 key 。即,一个桶用于 X,一个桶用于 Y。
  • 每个客户/功能组合一个存储桶,即存储桶将是 X-news、X-product、Y-news 和 Y-product。然后在整个bucket上使用map/reduce来按顺序返回结果。

  • 哪个是处理这个问题的最佳方法?

    最佳答案

    我会创建 2 个桶:新闻和产品。
    然后我会在每个存储桶中使用客户端名称作为键前缀。
    我可能还会在新闻键中包含日期以方便日期范围。

    news/acme_2011-02-23_01
    news/acme_2011-02-23_02
    news/bigcorp_2011-02-21_01
    

    并可选择在产品名称前加上类别名称
    products/acme_blacksmithing_anvil
    products/bigcorp_databases_oracle
    

    然后在你的 map /减少你可以使用 key filtering :
    // BigCorp News items
    {
      "inputs":{
         "bucket":"news",
         "key_filters":[["starts_with", "bigcorp"]]
      }
      // ... rest of mapreduce job
    }
    
    // Acme Blacksmithing items
    {
      "inputs":{
         "bucket":"products",
         "key_filters":[["starts_with", "acme_blacksmithing"]]
      }
      // ... rest of mapreduce job
    }
    
    // News for all clients from Feb 12th to 19th
    {
      "inputs":{
         "bucket":"news",
         "key_filters":[["tokenize", "_", 2],
                        ["between", "2011-02-12", "2011-02-19"]]
      }
      // ... rest of mapreduce job
    }
    

    关于riak - 如何在 Riak 中构建数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052154/

    相关文章:

    Riak 集群备份

    erlang - 哪个集群 NoSQL DB 用于消息存储?

    erlang - 使用 Riak 进行映射

    mongodb - 使用基于文档的 nosql(mongodb、couchdb 和 riak 等)查询关系数据的性能

    riak - 七周内提取Riak "Example Servers"七个数据库的第二章

    java - 如何测试使用 Basho 的 riak-java-client 的 java 代码?

    java - 为什么缺少一条消息?如何修复它?

    node.js - 哪个 nosql 数据库适合?

    amazon-ec2 - Riak 节点在更改 IP 地址后不再工作

    nosql - 为具有多个值的键建议一个数据库,高度可扩展