Cassandra在不同查询上的表现

时间:2015-06-10 14:09:09

标签: cassandra cqlsh spark-cassandra-connector

在Cassandra中,我读到我需要设计我的表模式,以便达到最小数量的分区。我已经设计了模式来满足这个要求。但我处在一个需要单独获取所有分区键的场景中。所以我打算用

Select Distinct <partitionKeys> from table

我使用cqlsh运行了大约15k行的独特查询。它非常快。

问题

  1. 如果我使用distinct,会不会出现性能问题?
  2. cassandra如何单独获取分区键?
  3. 我需要了解不同查询的限制。

1 个答案:

答案 0 :(得分:3)

  

如果我使用distinct,是否会出现任何性能问题? cassandra如何单独获取分区键?

基本上,Cassandra只需要翻阅节点并拉回该表的分区(行)键。通过这些按键查询Cassandra的设计是如何工作的,所以我并不感到惊讶,这对你的表现非常好。缺点是,它可能必须命中所有或大部分节点才能完成操作,因此如果你有大量节点,性能可能会很慢。

这是底层存储中CQL行和行之间的差异发挥作用的地方。如果使用libfoo_la_CXXFLAGS = $(FOO_SPECIFIC_CXXFLAGS) 工具查看数据,则可以看到如何区分不同的分区键。这是一个船舶的船员通过他们的船存放在桌子中的例子。

cassandra-cli

但是当我在aploetz@cqlsh:presentation> SELECT * FROm shipcrewregistry ; shipname | lastname | firstname | citizenid | aliases ----------+-----------+-----------+--------------------------------------+-------------------------------------- Serenity | Book | Derial | 48bc975a-c9f2-474d-8a29-247503445877 | {'CLASSIFIED'} Serenity | Cobb | Jayne | 2d643fb1-54fb-4c98-8d2d-a5bb9c6c8354 | {'Hero of Canton'} Serenity | Frye | Kaylee | d556cf44-348b-4ea3-8c19-ba9d4877818c | null Serenity | Inara | Serra | a25b7e02-8099-401a-8c41-d9d2ea894b72 | null Serenity | Reynolds | Malcolm | 169382b7-21b0-47bf-b1c8-19bc008a9060 | {'Mal', 'Sgt. Reynolds'} Serenity | Tam | River | af68201f-4135-413e-959c-dd81ea651e52 | null Serenity | Tam | Simon | aa090e1a-7792-4d7b-bba9-bac66f8c1f15 | {'Dr. Tam'} Serenity | Washburne | Hoban | 73f591df-c0dc-44c4-b3f3-9c37453c9537 | {'Wash'} Serenity | Washburne | Zoey | 46bc77ad-53ad-4402-b252-a0543005c583 | {'Corporal Alleyne', 'Zoey Alleyne'} (9 rows)

内查询时
cassandra-cli

这是为了说明9 CQL行实际上只是“引导下”的一行。

  

我需要知道不同查询的限制。

在CQL中,[default@presentation] list shipcrewregistry; Using default limit of 100 Using default cell limit of 100 ------------------- RowKey: Serenity => (name=Book:Derial:48bc975a-c9f2-474d-8a29-247503445877:, value=, timestamp=1424904853420170) => (name=Book:Derial:48bc975a-c9f2-474d-8a29-247503445877:aliases:434c4153534946494544, value=, timestamp=1424904853420170) => (name=Cobb:Jayne:2d643fb1-54fb-4c98-8d2d-a5bb9c6c8354:, value=, timestamp=1424904853492976) => (name=Cobb:Jayne:2d643fb1-54fb-4c98-8d2d-a5bb9c6c8354:aliases:4865726f206f662043616e746f6e, value=, timestamp=1424904853492976) => (name=Frye:Kaylee:d556cf44-348b-4ea3-8c19-ba9d4877818c:, value=, timestamp=1428442425610395) => (name=Inara:Serra:a25b7e02-8099-401a-8c41-d9d2ea894b72:, value=, timestamp=1428442425621555) => (name=Reynolds:Malcolm:169382b7-21b0-47bf-b1c8-19bc008a9060:, value=, timestamp=1424904853505461) => (name=Reynolds:Malcolm:169382b7-21b0-47bf-b1c8-19bc008a9060:aliases:4d616c, value=, timestamp=1424904853505461) => (name=Reynolds:Malcolm:169382b7-21b0-47bf-b1c8-19bc008a9060:aliases:5367742e205265796e6f6c6473, value=, timestamp=1424904853505461) => (name=Tam:River:af68201f-4135-413e-959c-dd81ea651e52:, value=, timestamp=1428442425575881) => (name=Tam:Simon:aa090e1a-7792-4d7b-bba9-bac66f8c1f15:, value=, timestamp=1424904853518092) => (name=Tam:Simon:aa090e1a-7792-4d7b-bba9-bac66f8c1f15:aliases:44722e2054616d, value=, timestamp=1424904853518092) => (name=Washburne:Hoban:73f591df-c0dc-44c4-b3f3-9c37453c9537:, value=, timestamp=1428442425587484) => (name=Washburne:Hoban:73f591df-c0dc-44c4-b3f3-9c37453c9537:aliases:57617368, value=, timestamp=1428442425587484) => (name=Washburne:Zoey:46bc77ad-53ad-4402-b252-a0543005c583:, value=, timestamp=1428442425596863) => (name=Washburne:Zoey:46bc77ad-53ad-4402-b252-a0543005c583:aliases:436f72706f72616c20416c6c65796e65, value=, timestamp=1428442425596863) => (name=Washburne:Zoey:46bc77ad-53ad-4402-b252-a0543005c583:aliases:5a6f657920416c6c65796e65, value=, timestamp=1428442425596863) 1 Row Returned. Elapsed time: 86 msec(s). 仅适用于您的分区键。我不确定有多少行会否定它的用处。 15000个CQL行应该没问题。但是如果你有数百万个不同的分区键(高基数),我希望性能下降......特别是你的集群中有几个节点。