【发布时间】:2012-07-19 02:46:16
【问题描述】:
我需要在社交应用中跟踪用户关系,如下所示:
UserA follow UserC, UserD, and UserE
UserZ follow UserC, UserD, and UserE
UserC follow UserA, UserD, and UserE
等等。
首先,我需要一个分区容错的数据库,这样 MySQL 和它的兄弟们就无法参与其中。
我查看了 couchdb,但它会为每个更改创建一个修订版,所以,如果您的文档是这样的:
{
uuid: uuid
name: name,
lastName: lastName
follows: [ uuid1, uuid2, uuid3 ]
}
您将在数据库中拥有其他修订版
(rev 1)
{
uuid: uuid
name: name,
lastName: lastName
follows: [ uuid1, uuid2 ]
}
(rev 2)
{
uuid: uuid
name: name,
lastName: lastName
follows: [ uuid1 ]
}
这是一个很大的空间,我知道你可以通过一些手动操作来释放它,但问题并没有消失。
我查看了 Cassandra,到目前为止,它看起来是一个很好的解决方案,它允许插入而没有像 couchdb 这样的额外空间问题。我可以创建一个键空间,然后是一个列,然后是一个存储关系,如下所示:
keyspace:{
column:{
...
uuidT:{ uuidA: timestamp, uuidB: timestamp, uuidZ }
uuidF:{ uuidA: timestamp, uuidB: timestamp, uuidZ }
uuidH:{ uuidA: timestamp, uuidB: timestamp, uuidZ }
...
}
}
但我想知道图形数据库是否最适合这个。
编辑:
搜索答案后,我发现此页面有助于选择数据库。 http://nosql.findthebest.com/
【问题讨论】:
-
Y U TAG COUCHDB WEN U NO WANT COUCHDB?
-
其实我喜欢所有的 couchdb 魔法,如果你现在有一种在 couchdb 中实现它的方法告诉我
-
没有办法解决在 Couch 中压缩数据库的需要。在您看到手动操作的地方,我看到的是设置后忘记的 cron 作业。
-
你在这个“一劳永逸的 cron 作业”中是对的
-
数据库压缩可以通过编程完成