我想将以下数据存储在NoSql中。原因是我将有很多写入,但读取较少(只有在批处理作业中,当我们需要拉出报告时),因此我选择了Cassandra
。现在你可以看到我的数据格式了。我将得到多个逗号分隔的项目,由一个人在特定会话中查看。现在,我为每个相应的项目存储单行。正如您在存储在Cassandra中的数据部分中看到的那样。所以,现在我的问题是,假设我想要提取filter Category=10或filter city=200的所有记录的报告。那么,如果我选择了这个表模式,或者我需要以不同的形式存储它,或者我需要将此数据存储在可以轻松提取报告的其他NoSql数据库中,那么我将如何应用cassandra中的该列,或者如何拆分该列?
数据输入:
"Cookie": "Ty44EnySoklz3456fdseses"
"Session": "vmt2Z2EpHQ"
"ItemId": "812781,681091,672396,632596,772796,704596"
"Referer": "RefererValue"
"Filter": "city=3001&filterbyadditional=2+4+3&ItemType=2&Category=10+1&color=12+7&owners=2+1&year=0-6&budget=2-4"
"Impression": 1
"DetailsView":1
"PhotoView": 0
"Response": 1
"ShortListItems": "812781,681091,672396"
存储在Cassandra中的数据:
cookie session ItemID Referer Filter Impression DetailsView PhotoView Response ShortListItems
Ty44EnySoklz3456fdseses vmt2Z2EpHQ 812781 RefererValue city=3001&filterbyadditional=2+4+3&ItemType=2&Category=10+1&color=12+7&owners=2+1&year=0-6&budget=2-4 1 1 0 1 812781,681091,672396
Ty44EnySoklz3456fdseses vmt2Z2EpHQ 681091 RefererValue city=3001&filterbyadditional=2+4+3&ItemType=2&Category=10+1&color=12+7&owners=2+1&year=0-6&budget=2-4 1 1 0 1 812781,681091,672396
Ty44EnySoklz3456fdseses vmt2Z2EpHQ 672396 RefererValue city=3001&filterbyadditional=2+4+3&ItemType=2&Category=10+1&color=12+7&owners=2+1&year=0-6&budget=2-4 1 1 0 1 812781,681091,672396
Ty44EnySoklz3456fdseses vmt2Z2EpHQ 632596 RefererValue city=3001&filterbyadditional=2+4+3&ItemType=2&Category=10+1&color=12+7&owners=2+1&year=0-6&budget=2-4 1 1 0 1 812781,681091,672396
Ty44EnySoklz3456fdseses vmt2Z2EpHQ 772796 RefererValue city=3001&filterbyadditional=2+4+3&ItemType=2&Category=10+1&color=12+7&owners=2+1&year=0-6&budget=2-4 1 1 0 1 812781,681091,672396
Ty44EnySoklz3456fdseses vmt2Z2EpHQ 704596 RefererValue city=3001&filterbyadditional=2+4+3&ItemType=2&Category=10+1&color=12+7&owners=2+1&year=0-6&budget=2-4 1 1 0 1 812781,681091,672396
发布于 2015-06-26 01:55:42
Basic Cassandra不支持like子句,也不太擅长执行即席查询。因此,如果您希望使用CQL访问此数据,则需要设计您的Cassandra模式来支持您计划进行的精确查询。例如,如果要对category值进行查询,可以将category作为聚类列,然后可以对category值执行范围查询。对于其他查询,您可能有使用不同字段的键的并行表。
但是,由于您提到了运行批处理作业来生成报告,因此您可能希望对原始表数据运行map reduce类型操作。为此,最流行的方法之一是将Apache Spark与Cassandra一起使用。使用Cassandra Spark连接器,您可以将Cassandra表数据读取到spark RDD中,然后对该数据运行转换(例如,根据类别或其他值过滤行)。
如果采用这种方法,您可能希望以某种合理方式对表数据进行分区,这样spark就不必执行全表扫描来生成报告,而是读取按日期分区的数据。
https://stackoverflow.com/questions/31043164
复制相似问题