Есть ли способ просмотреть данные в 2-х реплик в Кассандре? - PullRequest
2 голосов
/ 25 октября 2019

Я новичок в Cassandra. Я создал пространство ключей в Cassandra в NetworkTopology Strategy с 2 репликами в одном центре данных. Существует ли команда cql или какой-либо другой способ просмотра моих данных в двух репликах?

Как SELECT * FROM tablename in replica1 / replica2

Есть ли другой способ, позволяющий визуально просматривать данные в двух репликах?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Можно для конкретного раздела. Если вы уверены, что host1 является репликой (nodetool getendpoints или из трассировки запроса), то, если вы делаете запрос с помощью CL.ONE и явно для этого хоста, координатор всегда будет сначала выбирать local. Так что

Statement q = new SimpleStatement("SELECT * FROM tablename WHERE key = X");
q.setHost("host1")

Где host1 владеет X.

Для SELECT * FROM tablename это немного сложнее, потому что вы просматриваете весь набор данных, и координатор будет отправлять несколько запросов для каждогочасть кольца. Если вы выполните несколько запросов с CL.ONE, он все равно будет идти только к одному узлу для каждой части этого диапазона, поэтому, если вы установите q.enableTracing(), вы сможете увидеть, какой узел ответил для каждого диапазона. Вы не можете контролировать выбор координатора, поэтому можете выполнить несколько запросов.

Если вы просто хотите увидеть, есть ли различия, вы можете использовать предварительный просмотр. nodetool repair --preview --full.

3 голосов
/ 25 октября 2019

Так что ваш вопрос не совсем понятен: «Смотрите данные в 2-х репликах». Если вы когда-нибудь захотите проверить свои данные, вы можете запустить несколько команд, чтобы визуально увидеть вещи.

Первое, что вам нужно сделать, - это войти на узел, который вы хотите исследовать. Перейдите в каталог данных интересующей таблицы -> DataDir / keyspace / table. Там вы увидите один или несколько файлов, которые выглядят как * Data.db. Это твои sstables. Данные в памяти сбрасываются в sstables в определенных сценариях. Вы хотите быть уверены, что ваши данные будут сброшены из памяти на диск, если вы проверяете (иначе вы можете не найти то, что ищете). Для этого вы вводите команду «nodetool flush» (вы можете использовать пространство ключей и таблицу в качестве параметров, если хотите только очистить конкретную таблицу).

Как я уже сказал, после этого все в памяти будет записано на диск. Таким образом, вы сможете увидеть ваши файлы sstables (опять же, * Data.db). Если у вас есть эти sstables, вы можете запустить команду "sstabledump" на каждом sstable, чтобы увидеть данные, которые в них находятся, и таким образом проверить ваши данные.

Если у вас есть только несколько строк, которые вы хотите проверить, иМного узлов, вы можете найти, какой узел строки будут находиться, запустив "getondpoints nodetool" с ключом, таблицей и ключом раздела. Это скажет вам каждый узел, который будет иметь данные. Таким образом, вы не угадываете, на каком узле должна быть строка (и). К сожалению, нет никакого способа узнать, в каком sstable должны существовать строки (и это может быть больше одного, если произошли обновления / удаления и т. Д.). Вам придется пройти через каждый sstable на определенном узле (ах).

Надеюсь, что поможет ответить на ваш вопрос?

Удачи.

-Jim

...