C#Cassandra-查找并修改一行

C#Cassandra-查找并修改一行,c#,cassandra,C#,Cassandra,使用C#接口,我如何锁定Cassandra中的一行,更新它,然后解锁它?在释放锁之前,任何机器上的其他进程或同一机器上的线程都不能读取该行。您不能读取该行,因为在Cassandra中不存在锁概念,您必须使用分布式锁在应用程序中执行此操作。为此,你可以看看ZooKeeper、Hazelcast或Memcached——你可以用它们中的任何一种实现目标——我不喜欢c#world,但我看到这些产品都提供了一个c#客户端。你也可以看看Cages,这是一个基于ZooKeeper的库,专为目标() 或者,您可

使用C#接口,我如何锁定Cassandra中的一行,更新它,然后解锁它?在释放锁之前,任何机器上的其他进程或同一机器上的线程都不能读取该行。

您不能读取该行,因为在Cassandra中不存在锁概念,您必须使用分布式锁在应用程序中执行此操作。为此,你可以看看ZooKeeper、Hazelcast或Memcached——你可以用它们中的任何一种实现目标——我不喜欢c#world,但我看到这些产品都提供了一个c#客户端。你也可以看看Cages,这是一个基于ZooKeeper的库,专为目标()

或者,您可以使用轻量级事务()实现分布式锁。这只是一个想法,但是您可以有一个锁定CF。对于需要锁定的每一行,您可以使用IF NOT EXISTS子句将一个条目放入这个锁定表(使用串行CL)——如果您“获得了锁”(cassandra将在操作结果中告诉您),您可以开始工作。我在这个模型中看到的一个优点是,你可以用TTL写你的锁条目——如果你想象你的操作将持续最大X,你可以在2X的行上放置一个TTL,因此如果你的机器在从锁表中删除条目(“释放锁”)之前死亡,Cassandra将为你做这件事

嗯,,
卡洛

卡桑德拉没有用于锁定行的系统。Cassandra针对并发和分布式写操作进行了优化,分布式锁与系统的设计背道而驰。您可能希望研究CAS操作,这些操作可能会产生一些您想要的属性轻量级事务似乎满足了我的需要。谢谢分享。