Database design 如何在最终一致的数据库上实现列表?
我希望通过Cassandra、Riak或任何其他最终一致的存储实现列表和队列。这可能吗?我该怎么做Database design 如何在最终一致的数据库上实现列表?,database-design,list,nosql,Database Design,List,Nosql,我希望通过Cassandra、Riak或任何其他最终一致的存储实现列表和队列。这可能吗?我该怎么做 我正在寻找一种通用算法。我不完全理解。什么列表/队列?您可以创建一个(一个/多个)文档,其中包含每个队列/列表。你是说查询之类的(听起来有点像SQL思维) 在这里可以找到一篇关于建模和不建模的非常好的文章: 怎么不做呢 怎么做 如果我理解错了,请澄清:)我不完全理解。什么列表/队列?您可以创建一个(一个/多个)文档,其中包含每个队列/列表。你是说查询之类的(听起来有点像SQL思维) 在这里可以
我正在寻找一种通用算法。我不完全理解。什么列表/队列?您可以创建一个(一个/多个)文档,其中包含每个队列/列表。你是说查询之类的(听起来有点像SQL思维) 在这里可以找到一篇关于建模和不建模的非常好的文章: 怎么不做呢 怎么做
如果我理解错了,请澄清:)我不完全理解。什么列表/队列?您可以创建一个(一个/多个)文档,其中包含每个队列/列表。你是说查询之类的(听起来有点像SQL思维) 在这里可以找到一篇关于建模和不建模的非常好的文章: 怎么不做呢 怎么做
如果我理解错了,请澄清:)你可以走另一条路,使用Lucene存储你的“列表”,只需在Lucene中添加一列作为“对话索引”或你正在做的任何事情
有关更多信息,请参见项目。另外,有一个很好的书写方式。你可以选择另一种方式,使用Lucene存储你的“列表”,只需在Lucene中添加一列作为“对话索引”或你正在做的任何事情 有关更多信息,请参见项目。此外,还有一个很好的书面说明。免责声明:我对卡桑德拉或里亚克并不特别熟悉。这适用于一般的“数据库”(不一定是关系数据库、分布式数据库等) 我假设您能够存储和访问“键值对”(即一对值(a,b),其中a是值b的键) 我还将使用此符号来表示一些广义的“对象”(数据结构、对象、字典等):Person[姓名:“John Doe”年龄:49] 实施链表 假设您有一个键值对(key,value)和一个对象[fields:values…],则可以通过以下方式在数据库中实现链表:
def find(first, node):
if node = first[next]:
return first[next]
else:
find(first[next], node)
搜索前任:
def find_pred(first, node):
if node = first[next]:
return first
else:
find_pred(first[next], node)
在特定节点之前插入:
def insert_at_front(node, inserted_node):
find_pred(node)[next] = inserted_node
inserted_node[next] = node
队列的实现
在这种情况下,队列可以是一个链表,其中自动知道两个特定值(可能存储在数据库中):
def find(first, node):
if node = first[next]:
return first[next]
else:
find(first[next], node)
搜索前任:
def find_pred(first, node):
if node = first[next]:
return first
else:
find_pred(first[next], node)
在特定节点之前插入:
def insert_at_front(node, inserted_node):
find_pred(node)[next] = inserted_node
inserted_node[next] = node
队列的实现
在这种情况下,队列可以是一个链表,其中自动知道两个特定值(可能存储在数据库中):
注意:这些算法是特意简化的;它们不是用任何特定的语言编写的,不处理异常、列表末尾等,不应该用于诸如此类的东西。。。。等等。看看笼子项目。它可能对您的用例有帮助。
它基本上使用ZooKeeper集群进行锁定,以便数据具有逻辑一致性。当您的应用程序想要修改列表时,可以持有锁,以便其他用户不会同时修改列表 看一看Cages项目。它可能对您的用例有帮助。 它基本上使用ZooKeeper集群进行锁定,以便数据具有逻辑一致性。当您的应用程序想要修改列表时,它可以持有一个锁,这样它就不会被其他用户修改