1

我们正在为 cassandra 探索 SPARK,以克服 CQL 的限制。

我们最初仅限于 CQL,但在 RDBMS 上几乎没有遇到障碍/障碍。仅举几例如下

  1. 为了在列上比较>(大于)<(小于),我们被限制为具有 Clustering 键中的列。即使我在集群中有一个列,我仍然应该提供分区键来对集群键执行 < 或 >。
  2. 无法检查任何列值的 NULL
  3. 为了查询其他分区键的任何列,我们必须在该列上创建索引
  4. ORDER BY 不是 CLUSTERING KEY 的列
  5. 分组限制
  6. 连接表

我是 cassandra 的新手,由于限制,我经常重新访问我的模式。

因此类似于 HDFS 的 HIVE/PIG,Spark 比 CQL 有什么额外的好处?

4

1 回答 1

2

CQL 不是 SQL 的替代品。它实际上是为从几个(通常是一个)分区键中提取值而设计的,并且正如您所指出的,它不会进行任何类型的聚合、分组、非常有限的排序等(尽管 Cassandra 3.0 将具有 UDF 和 UDA) .

以下是 Spark 通过 CQL 提供的功能:

  • 通过 DataFrames 和 SQL 进行常规聚合和查询,包括 JOIN、GROUP BY、ORDER BY 和 UDF
  • 如果您使用 sqlContext.cacheTable 将 Cassandra 数据缓存在内存中,则查询速度会显着加快 - 数量级更快
  • 使用 Scala、Java、Python 和 R API 集成机器学习、统计、图形处理和几乎任何类型的分布式计算
  • 能够在许多其他数据源(包括各种 HDFS 格式、Amazon S3、DBMSes、Mongo 和当今大多数其他数据库)中进出 Cassandra 表的 ETL

Spark 确实是与 CQL 完全不同的野兽。它提供对大量数据的复杂分析,而 CQL 没有。但是,也有一些限制:

  • Spark 不擅长高并发查询。为此,您希望保持查询简单并使用 CQL 提取非常少量的数据。
  • 在 Spark 中缓存数据不是 HA,并且在您将新数据写入 C* 时无法更新

如果您想通过 Cassandra 进行非常快速的分析查询,支持更新且无需缓存,请查看我的项目http://github.com/tuplejump/FiloDB

于 2015-12-03T00:24:00.940 回答