与 CQL 相比,Spark 有哪些额外优势?

What additional benefits does Spark give over CQL?

我们正在探索 Cassandra 的 SPARK,以克服 CQL 的局限性。

我们最初仅限于 CQL,但在 RDBMS 上几乎没有道路 blocks/hurdles。举几个例子如下

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

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

因此与 HDFS 的 HIVE/PIG 类似,Spark 比 CQL 有哪些额外优势?

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