【问题标题】:Designing NoSQL Data Model and Storage System设计 NoSQL 数据模型和存储系统
【发布时间】:2019-01-20 19:20:04
【问题描述】:

我遇到了如下问题:

XYZ 网站需要显示一个包含所有食谱列表的页面,并且当用户单击每个食谱时,他们希望显示包含其成分的食谱页面。他们还希望用户进一步点击每种成分并查看与该成分相关的所有食谱。

目前,配方数据以 CSV 格式从旧系统接收。 CSV 数据如下所示

recipe_id、recipe_name、描述、成分、有效、updated_date、created_date

1, 意大利面, 意大利面, 番茄酱, 真的, 2018-01-09 10:00:57, 2018-01-10 13:00:57
1, 意大利面, null, 奶酪, 真的, 2018-01-09 10:10:57, 2018-01-10 13:00:57 2, 千层面, 分层千层面, 起司, 真的, 2018-01-09 10:00:57, 2018-01-10 13:00:57
2、千层面、分层千层面、蓝纹奶酪、假的、2018-01-09 10:00:57、2018-01-10 13:00:57 ....

    Assume that this CSV is consume every 1 hour with 1TB of data You are asked to:  
  1. 创建可以存储此数据的数据模型,以允许用户执行 上述活动。该数据模型需要支持数百万 每秒读取一次。
  2. 讨论您将用于存储这些数据的持久性系统。
  3. 在 Scala 中编写一个 Spark 作业,它可以获取上面显示的 CSV 并存储 使用您讨论的数据模型在您选择的存储系统中 以上。
  4. 编写查询以回答以下问题 一种。平均每小时更新的食谱数 一世。例如。意大利面在一小时内更新了两次 湾。全年 10:00 点更新的菜谱数。

我的问题是, 哪种存储系统(HBASE、Cassandra、Redis 等)最适合这种情况? 任何数据模型帮助将不胜感激。

非常感谢, 卡维

【问题讨论】:

    标签: apache-spark cassandra nosql hbase


    【解决方案1】:

    Redis 是一个内存数据库,这意味着您需要至少 1TB 以上的 RAM 来存储数据集。这并不便宜,而且对于您的用例来说可能有点过头了。

    Cassandra 是您描述的简单键值、读取繁重工作量的不错选择。

    CREATE TABLE recipe ( 
        id int PRIMARY KEY, 
        name text, 
        description text,
        ingredients list <text>, 
        active boolean,
        updated_date timestamp, 
        created_date timestamp
    );
    

    【讨论】:

      猜你喜欢
      • 2013-06-13
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 2017-09-16
      • 2011-11-17
      • 1970-01-01
      相关资源
      最近更新 更多