Можно ли указать cassandra выполнять запрос только на локальном узле

У меня есть два узла, которые полностью реплицированы. Когда я запускаю запрос к таблице, содержащей 30 строк, трассировка cqlsh, по-видимому, указывает на то, что она извлекает некоторые строки с одного сервера и некоторые строки с другого сервера.

Таким образом, несмотря на то, что все строки доступны на обоих узлах, запрос занимает 250 мс+, а не 1 мс для других запросов.

У меня уже есть уровень согласованности, установленный на «один» на уровне протокола, что еще вам нужно сделать, чтобы он использовал только один узел для запроса?

select * from organisation:

 activity                                                                                        | timestamp    | source       | source_elapsed
-------------------------------------------------------------------------------------------------+--------------+--------------+----------------
                                                                              execute_cql3_query | 04:21:03,641 | 10.1.0.84 |              0
                                                 Parsing select * from organisation LIMIT 10000; | 04:21:03,641 | 10.1.0.84 |             68
                                                                             Preparing statement | 04:21:03,641 | 10.1.0.84 |            174
                                                                   Determining replicas to query | 04:21:03,642 | 10.1.0.84 |            307
                                                                 Enqueuing request to /10.1.0.85 | 04:21:03,642 | 10.1.0.84 |           1034
                                                                   Sending message to /10.1.0.85 | 04:21:03,643 | 10.1.0.84 |           1402
                                                                Message received from /10.1.0.84 | 04:21:03,644 | 10.1.0.85 |             47
 Executing seq scan across 0 sstables for [min(-9223372036854775808), min(-9223372036854775808)] | 04:21:03,644 | 10.1.0.85 |            461
                                                              Read 1 live and 0 tombstoned cells | 04:21:03,644 | 10.1.0.85 |            560
                                                              Read 1 live and 0 tombstoned cells | 04:21:03,644 | 10.1.0.85 |            611

………..etc….....

person Jay    schedule 18.11.2014    source источник
comment
Связано с stackoverflow.com/questions/26586927/   -  person Raedwald    schedule 18.11.2014
comment
- Являются ли 2 узла похожими с точки зрения оборудования? Одинакова ли нагрузка на обоих (проверьте системные метрики) — можете ли вы выдать статус nodetool, информацию об nodetool и netstat nodetool на обоих узлах?   -  person G Quintana    schedule 18.11.2014


Ответы (1)


Оказывается, в версиях Cassandra 2.0.5-2.0.9 была ошибка, из-за которой Cassandra с большей вероятностью запрашивала данные на двух узлах, когда ей нужно было поговорить только с одним.

Обновление до версии 2.0.10 или выше решает эту проблему.

См.: КАССАНДРА-7535

person Jay    schedule 19.11.2014
comment
+1 Хорошая находка. Мне было интересно узнать об этом, так как ваш координатор должен был определить, какой узел ближе всего, и придерживаться его (если только он не стал недоступным). - person Aaron; 19.11.2014