设计NoSQL数据模型和存储系统

时间:2018-08-14 02:21:49

标签: apache-spark cassandra nosql hbase

我遇到了如下问题:

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

当前,配方数据以CSV形式从旧系统作为提要接收。 CSV数据看起来像这样

食谱ID,食谱名称,描述,成分,有效日期,更新日期,创建日期

1,意大利面,意大利面,番茄酱,正确,2018-01-09 10:00:57,2018-01-10 13:00:57
1,意大利面,空,奶酪,正确,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. 编写查询以回答以下问题 一种。每小时平均更新的食谱数量     一世。例如。面食在一小时内更新两次 b。全年10:00时更新的食谱数量。

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

非常感谢, 卡维

1 个答案:

答案 0 :(得分:0)

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
);