如何使用cassandraapi将python的cosmos\u客户端连接到cosmos db示例?

00jrzges  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(443)

我已经设置了一个cosmosdb(cassandraapi)示例,我想从python应用程序管理它的吞吐量。我可以使用azure中列出的cassandra终结点和主密码创建azure.cosmos.cosmos\u客户端,但所有尝试与客户端的交互都会导致“azure.cosmos.errors.httpfailure:状态代码:404”。
我已经通过python中的cassandra驱动程序成功地与这个数据库进行了交互,但是我想访问cosmos客户机,通过代码来管理吞吐量供应。我想自动调整吞吐量,因为数据库使用在高利用率和几乎没有活动之间波动。
创建cosmos\u客户端需要一个有效的uri,其中包含模式(https/http/ftp等)。azure上列出的端点(成功用于通过cqlsh连接)以及python cassandra驱动程序没有指定架构。我在提供的端点的开头添加了“https://”,并能够用python创建客户机(“http://”导致错误,还验证了不正确的地址也会导致错误,即使使用“https://”)。现在我已经创建了一个客户机对象,任何与它的交互都会产生404个错误。

client = cosmos_client.CosmosClient(f'https://{COSMOS_CASSANDRA_ENDPOINT}', {'masterKey': COSMOS_CASSANDRA_PASSWORD} )

client.ReadEndpoint
        #'https://COSMOS_CASSANDRA_ENDPOINT'

client.GetDatabaseAccount(COSMOS_CASSANDRA_ENDPOINT)
        #azure.cosmos.errors.HTTPFailure: Status code: 404

client.ReadDatabase(EXISTING_KEYSPACE_NAME)
        #azure.cosmos.errors.HTTPFailure: Status code: 404

我想知道使用cosmos\u客户端是否是与cosmos cassandra示例交互以修改python应用程序吞吐量的正确方法。如果是这样,我应该如何正确设置cosmos\u客户端?也许有一种方法可以直接通过使用cassandra驱动程序修改数据库来实现这一点。

x6492ojm

x6492ojm1#

经过一段时间的努力,我无法通过python和.net中的cosmosclient或documentclient访问数据库。最后,我发现了两种方法,不幸的是,每种方法都有点粗糙,并且提出了一些似乎不必要的挑战。
我最后做的是通过调用azurecli的子进程来改变吞吐量。这是执行的命令:

f'az cosmosdb cassandra table throughput update --account-name {__cosmos_instance_name} --keyspace-name {__cassandra_keyspace} --name {table_name} --resource-group {__cosmos_resource_group} --throughput {new_throughput}'

非常不幸的是,我发现这两种方法都可以工作,当目标数据库由于速率限制而被限制时,这两种方法都不起作用。这意味着在调用代码执行伸缩之前,我们还必须实现一些逻辑来限制我们自己的服务与数据库的交互。
关于我们的解决方案的一些其他注意事项:服务托管在kubernetes中,因此我们将度量评估和缩放执行添加到pod上的生命周期挂钩中。当处理cassandra.cluster.nohostavailable异常时,在cassandra交互过程中遇到可疑的速率限制时,也会执行自动定标器。
...
我可以从代码中设置配置吞吐量的另一种方法是,通过cassandra驱动程序(在python中)直接执行cql:

from cassandra.cqlengine import connection

connection.setup(<CONNECTION_SETUP_ARGS>)
session = connection.get_session()
session.execute("use <CASSANDRA_NAMESPACE>")
session.execute("alter table <CASSANDRA_TABLE_NAME> with cosmosdb_provisioned_throughput=<DESIRED_THROUGHPUT>")

如果有机会,我会切换到这种方法,因为它不需要azure cli安装和子进程调用。
我想我是从这里得到这个主意的。

相关问题