如何比较Cassandra中的两个表

时间:2017-08-22 18:42:47

标签: cassandra java-8 apache-spark-sql gemfire

我必须比较Cassandra中的两个表来获得差异。这是要求。我们必须执行库存盘点,我们将输入/扫描库存中的每个项目,完成后我们将全部与主库存表进行比较以获得差异。 我在Cassandra创建了一个临时表,我将在每次扫描时插入记录。

**TempInventory**

userId
storeId
skuId
PK(storeId, skuId)

我有主表和其他详细信息 -

**Inventory**

storeId
skuId
skuDesc
..
..
PK(storeId)

扫描完成后再提交我必须将tempInventory与Inventory表进行比较以获得差异。那么在Cassandra中这样做的最好方法是什么,因为我们不能使用连接 -

  1. 在对象集合中获取Java类中的所有内容,然后进行比较(使用Java 8功能以获得更好的性能)[在这种情况下,库存表大小可能超过3000.所以这样可以在JVM中获取所有内容)
  2. 使用带有Cassandra的spark SQL允许使用连接(Spark对我来说是新的,所以没有更好的想法。一些示例链接会有所帮助)
  3. 是否有其他可用的实用程序(例如来自Apache)
  4. 我也在使用Gemfire。但我认为我们无法使用复合键在gemfire中创建区域。请纠正我。
  5. 请建议哪种方法最合适。

1 个答案:

答案 0 :(得分:0)

正确,Cassandra没有提供任何与表格比较的内置机制,您需要自己动手。

第一个建议是在两个表中使用相同的主键。你需要在临时表的PK中添加skuId吗?这将使得获取数据比较困难。

我想说答案取决于您需要处理的数据量。如果您有大量(数百GB或更多),那么使用Spark或Storm进行流处理是值得的。如果你没有那么多,你可以使用一个简单的Java程序。可能需要一段时间才能完成,但你不必将Spark或Storm放到一起。