有没有一种方法可以在cassandra中查看两个副本中的数据?

cbwuti44  于 2021-06-10  发布在  Cassandra
关注(0)|答案(2)|浏览(384)

我是cassandra的新手,我在cassandra的networktopology策略中创建了一个密钥空间,在一个数据中心中有两个副本。是否有cql命令或其他方法来查看两个副本中的数据?
就像 SELECT * FROM tablename in replica1 / replica2 是否有其他方法使我可以直观地看到两个副本中的数据?
提前谢谢。

kiz8lqtg

kiz8lqtg1#

你可以为一个特定的分区。如果你确定 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 .

snvhrwxg

snvhrwxg2#

所以你的问题不是很清楚“在两个副本中查看数据”。如果您想验证您的数据,您可以运行一些命令来直观地查看数据。
您要做的第一件事是登录到要调查的节点。转到感兴趣的表的数据目录->datadir/keyspace/table。在这里,您将看到一个或多个类似于*data.db的文件。那些是你的table。在某些情况下,内存中的数据会被刷新到sstables。如果正在验证,则需要确保数据已从内存刷新到磁盘(否则可能找不到要查找的内容)。为此,可以发出“nodetool flush”命令(如果只想刷新特定的表,可以使用keyspace和table作为参数)。
就像我说的,在那之后,内存中的所有内容都会被刷新到磁盘上。所以您可以查看sstables(同样,*data.db)文件。一旦有了这些sstables,就可以在每个sstable上运行“sstabledump”命令来查看驻留在其中的数据,从而验证数据。
如果只需要验证少数行和大量节点,可以通过使用keyspace、table和partition键运行“nodetool getendpoints”来找到这些行将驻留的节点。它会告诉你每个节点都会有数据。这样您就不会猜到行应该在哪个节点上。不幸的是,没有办法知道行应该存在于哪个sstable中(如果发生更新/删除等,它可能不止一个)。您必须检查特定节点上的每个sstable。
希望这有助于回答你的问题?
祝你好运。
-吉姆

相关问题