Tentei identificar o motor (Cassandra, Scylla, AstraDB, CosmosDB, Yugabyte, ...) com base na Cassandra Query Language (CQL). ​​Concentrei-me nas tabelas system.local e system.peers , veja o exemplo:
SELECT release_version FROM system.local;
e
SELECT release_version FROM system.peers;
mas não obtive informações relevantes sobre o sistema/motor. Você resolveu esse problema?
Nenhuma das versões do Cassandra (ou distribuições) que conheço informa o tipo de "mecanismo" que ele é.
No Apache Cassandra, o
release_version
é simplesmente a versão de lançamento, por exemplo:O Astra DB da DataStax relata a versão de lançamento como:
Sem conhecer seu caso de uso, não consigo pensar em uma situação em que relatar a distribuição/bifurcação faria sentido, porque isso é algo que você já saberia com antecedência ao se conectar ao banco de dados.
Por exemplo, você precisa do pacote seguro mais o token do aplicativo para se conectar ao Astra DB. Isso não é algo exigido por outras versões do Cassandra. Da mesma forma, você já saberia pelos pontos de contato que está se conectando a uma instância do ScyllaDB Cloud.
Posso pensar em casos limitados em que você não saberia de antemão a que tipo de fork ou distribuição do Cassandra você está se conectando. Abraços!
Boa pergunta. Fiquei surpreso por não haver uma maneira mais organizada, ou pelo menos documentada, de fazer isso.
Em relação ao ScyllaDB, infelizmente se você fizer isso
select release_version from system.local
no ScyllaDB o resultado não será útil: Você receberá de volta "3.0.8" - que é uma versão antiga do Cassandra que antigamente os drivers do Cassandra esperavam para permitir que alguns recursos fossem usados ​​corretamente - veja a discussão em https://github.com/scylladb/scylladb/issues/8740 . Essa discussão também menciona como você pode obter a versão do ScyllaDB:Você também pode reconhecer o ScyllaDB como distinto de outros mecanismos CQL ao notar que há tabelas do sistema Scylla; Por exemplo,
Retornará um resultado não vazio somente no ScyllaDB.
A propósito, você também pode executar um
show version;
de dentro do CQLSH, e ele fornecerá todas as informações da versão (também vistas no momento da conexão do CQLSH):