2015-06-10 6 views
2

В Кассандре я прочитал, что мне нужно разработать схему таблицы, чтобы было поражено минимальное количество разделов. Я разработал схему для удовлетворения этого требования. Но я в сценарии, где мне нужно получить все ключи раздела в одиночку. Поэтому я планирую использоватьПроизводительность Кассандры по разным запросам

Select Distinct <partitionKeys> from table

Я провел отчетливую запрос с использованием cqlsh около 15k строк .Это было довольно быстро.

Вопросы

  1. Будут ли какие-либо проблемы с производительностью, если я использую отличие?
  2. Как cassandra извлекает только ключи разделов?
  3. Мне нужно знать ограничения на отдельный запрос.

ответ

3

Будут ли какие-либо проблемы с производительностью, если я использую разные? Как cassandra извлекает только ключи разделов?

В принципе, Cassandra просто должен разорвать узлы и оттянуть ключи раздела (строки) для этой таблицы. Запрос этими ключами - это то, как Cassandra был разработан для работы, поэтому я не удивлен, что это очень хорошо для вас. Недостатком является то, что для завершения операции, вероятно, придется ударить по всем или большинству ваших узлов, поэтому производительность может быть медленной, если у вас большое количество узлов.

Здесь разворачивается разница между строками и строками CQL в базовом хранилище. Если вы посмотрите на свои данные с помощью инструмента cassandra-cli, вы увидите, как обрабатывать ключи разделов по-разному. Вот пример, где члены экипажа судна хранятся в таблице, их кораблем.

[email protected]: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:

[[email protected]] 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). 

Это предназначено, чтобы показать, как 9 CQL строк на самом деле только одна строка «под капотом».

Мне нужно знать ограничения на отдельный запрос.

В CQL DISTINCT будет работать только на ваших ключах разделов. Я не уверен, сколько строк будет отрицать его полезность. 15000 строк CQL должны быть хорошими для него. Но если у вас есть миллионы отдельных ключей разделов (высокая мощность), я ожидаю, что производительность снизится ... особенно с несколькими узлами вашего кластера.

+0

Я не совсем понимаю фактическое хранилище строк в кассандре. Как строка, показанная в cqlsh, отображается в фактическую строку в базовой кассандре? Пожалуйста, дайте мне хорошие ссылки для понимания. – Knight71

+1

@ Knight71 Конечно! Джон Берриман написал * замечательную статью на эту тему: http://planetcassandra.org/blog/understanding-how-cql3-maps-to-cassandras-internal-data-structure/ – Aaron