TLDR; 当
我正在尝试并发使用Cassandra。 Cassandra版本:
当生产者创建并填充表时,消费者通过运行CQL语句等待表的创建。但是,即使
根据我发现的信息,当SELECT语句在一个尚未被创建的表上执行时,就会出现错误。 因此,虽然
也许有一种更可靠的方法来检查表的可访问性?或者是常见的解决办法?
system_schema.tables
已经包含有关该表的记录时,该表仍然无法访问。我正在尝试并发使用Cassandra。 Cassandra版本:
[cqlsh 5.0.1 | Cassandra 3.11.3 | CQL spec 3.4.4 | Native protocol v4]
我有两个Python脚本,使用cassandra-driver==3.16.0
分别作为消费者和生产者在不同进程中运行。当生产者创建并填充表时,消费者通过运行CQL语句等待表的创建。但是,即使
system_schema.tables
已经包含有关该表的记录,该表仍无法访问。table_exists = False
while not table_exists:
cql = SimpleStatement(
"SELECT table_name FROM system_schema.tables WHERE keyspace_name = 'test_keyspace' AND table_name = 'test_table'"
)
results = cassandra_session.execute(cql)
table_exists = bool(results.current_rows)
在至少有一条记录的情况下,通过语句结果我得出结论表已被创建,并尝试使用SELECT
读取:
SELECT * FROM test_keyspace.test_table WHERE ...
但有时我会遇到非常烦人的错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/stress.py", line 128, in runner
for r in select(TEST_KEYSPACE, table_name):
File "/stress.py", line 63, in select
results = cassandra_session.execute(statement)
File "cassandra/cluster.py", line 2171, in cassandra.cluster.Session.execute
File "cassandra/cluster.py", line 4062, in cassandra.cluster.ResponseFuture.result
cassandra.InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table test_table"
根据我发现的信息,当SELECT语句在一个尚未被创建的表上执行时,就会出现错误。 因此,虽然
system_schema.tables
中已经包含有关该表的记录,但该表尚不可访问。也许有一种更可靠的方法来检查表的可访问性?或者是常见的解决办法?
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'}
的键空间。 - Symon