2014-05-14 43 views
2

我正在使用分层数据,如在树结构中一样。我想知道什么是将它们存储在数据库中的最佳方式。以最佳方式存储分层数据:NoSQL或SQL

我以MySQL的邻接表开始。但随着数据的增加,性能似乎会下降。我有大约20,000行与父子关系存储在一个MySQL表中,将来会增加。抓取数据需要很长时间,因为我必须根据树的深度编写许多自连接。

所以我正在寻找最好的方式来存储这种数据。在我发现的地方,嵌套集比邻接列表更好。然后我被建议看看NoSQL,如果这能解决我的问题。所以我现在很困惑,不管是留在SQL中还是进入No SQL,或者是否有其他最好的方式来处理这种数据。

所以任何人都可以告诉我什么是最好的方法?

+0

你打算如何处理你的数据?您是否需要强大的一致性或特定类型的操作性能?你想要SQL吗? – LMeyer

+0

我需要更好的性能,因为我在我的SQL查询中使用了许多连接。我已经在使用MySQL。我打算有很多读取,而不是写入数据库。 – Kushi

回答

3

如果MySQL给你提供了比解决问题更多的麻烦,我会看看MongoDB,CouchDB或ElasticSearch(取决于你的用例)。甚至可能是Neo4j。您的选择应该归结为几点,如复制,扩展容量,一致性......我建议您在决定之前仔细阅读一些官方文档。这里有一个starting point作比较。

外出时的NoSQL将摆脱所有的连接和提高你的表现,但你仍然需要使用邻接表,嵌套集合来实现适当的层次结构,物化路径和这样...

记住的NoSQL上述技术几乎都使用最终一致性,这基本上意味着在某些节点的给定时间,您的数据可能不一致。如果这是一个问题,你应该坚持RDBMS。

+0

感谢您的回复。但我不明白你的意思是**数据可能不一致**。你可以给我一个例子! – Kushi

+0

@Kushi它指CAP定理中的一致性属性。你可以阅读[this](http://stackoverflow.com/questions/5466012/nosql-and-eventual-consistency-real-world-examples)来解释。 – LMeyer