我必须选择一个数据库来实现共享系统。
我的系统将拥有用户和文档。我必须与一些用户共享一份文件。
实施例: 有2个用户,并且有一个文档。
因此,如果我必须与两个用户共享该文档,我可以做这些可能的解决方案:
我正在使用的当前方法是使用MySQL(我不想使用它):
Relational Databases (MySQL)
Users Table = user1, user2
Docs Table = doc1
Docs-User Relation Table = doc1, user1
doc1, user2
我想使用这样的东西:
NoSQL Document Stores (MongoDB)
Users Documents:
{
_id: user1,
docs_i_have_access_to: {doc1}
}
{
_id: user2,
docs_i_have_access_to: {doc1}
}
Document's Document:
{
_id: doc1
members_of_this_doc: {user1, user2}
}
我还不知道如何在像Redis这样的键值存储中实现。
所以我只是想知道,我上面给出的MongoDB方式是最好的解决方案吗? 还有其他方法可以实现吗?也许与其他数据库解决方案 我是否应该尝试使用Redis实现它?
我应该选择哪种数据库和哪种方法,最好是分享数据?为什么?
注意:我想要一些高度可扩展且持久的东西。 :d
感谢。 :d
答案 0 :(得分:1)
只考虑这个简单的例子(你只需要保留谁拥有什么)SQL似乎是最合适的,因为它会免费提供额外的选项,例如报告谁有多少文档,最受欢迎的文档,大多数活跃的用户等几乎没有成本+数据将更加一致(没有重复,可能是外键)。除非您当然有数百万份文件,否则这是有效的。
如果我在面向文档的DB和关系数据库之间做出选择,我会主要根据文档本身的结构做出决定。无论它们是统一的还是可能具有不同类型的不同字段,您是否可以嵌套子文档或数组,并能够按其内容进行搜索。
答案 1 :(得分:1)
实际上,您需要表示多对多关系。一个用户可以拥有多个文档。一个文档可以在多个用户之间共享。
请参阅我之前对此问题的回答:how to have relations many to many in redis
使用Redis,表示与set数据类型的关系是一种非常常见的模式。对于这种数据模型,您可以期望获得比MongoDB更好的性能。作为奖励,您可以轻松有效地查找哪些用户具有共同的给定文档列表,或者哪些文档由给定的一组用户共享。