规划数据库扩展和架构更改

时间:2015-07-17 17:40:49

标签: mysql database neo4j redis arangodb

我在创建社交网络数据库之前进行了研究,并且我发现了许多与社交网络图和键值数据库有关的问题/资源。我知道有一些不同的选项和方法来实现数据库。我也明白,大公司所做的事情很复杂,远远超出我目前的需求(1b +用户)。我也知道每家大公司都已经改造了他们的数据库,以解释他们经历的疯狂扩展。

因为我不知道网络将如何发展,而且我不相信我能够准确地创建一个可扩展到100万用户的模型(由于未知数,例如人们将如何使用它,如何经常有人发帖,评论等)。但我至少可以尝试创建一个最容易扩展的数据库(如果需要)。

大多数公司是否创建了一个数据库来处理多达1k的用户,然后一旦他们成长,他们会为10k用户,然后100k等进行改造?如果他们这样做,在每个这些任意数字(由于上面列出的未知数),公司通常会更改一些表/节点/等,或者他们是否完全重新创建数据库以利用新技术(例如从SQL迁移)图表)?

我想选择最佳解决方案,但我发现图形,键值,SQL等决策非常困难 - 特别是没有数据可以知道哪些关系/数据最重要。我相信我可以使用一个可以支持多达1万用户的图表来创建一个可靠的系统,但是我担心随着系统的增长可能会完全重新启动数据库。现在这是一个担心,以避免问题,或现在实施并适应以后的类型问题?

更进一步,如果我确实需要规划完整的数据库重组,那么使用多模型NoSQL DBMS(例如OrientDB或ArangoDB)通常是否有意义?

1 个答案:

答案 0 :(得分:1)

我个人认为你提出了过早的问题。

说真的,即使模型不好,数据库也可以处理10k用户。

您考虑扩展,但最难的问题不是扩展要达到您需要扩展的程度

我确定每个人都想要10亿用户,但是你已经梦想拥有一个比Github本身多200倍的社交网络? (Github有大约500万用户)。

此外,即使通过思考,你也会在几年内再次重构和重构,并且你将拥有多个持久层,确保它。

代码和代码良好,保持精益,能够在同一天内快速更改,部署,向用户显示,重构,测试,部署和向用户显示。这些是您现在需要做的事情,而不是询问您尚未解决的问题,您现在肯定还有很多其他问题需要解决; - )

<强>更新

根据您的评论,您可能需要考虑我们无法简单回答的问题,因为我们并不需要您的确切要求。

我有一个简单的应用程序,它使用4个持久层,而且这个应用还没有在线。我会给你我的&#34;为什么&#34;关于使用它和哪个用例:

  1. Neo4j:它是应用程序数据的核心,我使用它是因为我喜欢它,我非常了解它(这是我的工作)而且,因为应用程序的概念是相当新的并且可以发展很快,拥有一个无模式数据库正在减少很多重构的东西。此外,我现在有很多用例来构建应用程序,这使得Neo4j成为一个很好的选择,当你需要添加功能而不会破坏已经完成的工作时。

  2. 的MySQL

  3. 我将它用于用户帐户和个人资料。为什么?因为我使用的框架已经有很多捆绑包在几行代码中集成了这种东西,捆绑包很好地维护,如果我会使用(当前)neo4j,我将不得不重新发明轮子。我使用的所有模块都在稳定性和与框架的兼容性方面发展。

    当然,mysql数据与neo4j耦合(最低限度)。但我知道这种数据不会发展那么多,所以Mysql是一个不错的选择,如果我必须重构一些点,这不会是一个巨大的痛苦。

    1. Redis的
    2. 我使用Redis存储分析数据,Redis非常灵活,我可以轻松创建新密钥并在其上添加数据。

      1. RabbitMQ:
      2. 我使用了很多消息队列,为什么?用于测试重构。我可以轻松地处理多个消费者的消息,以便进行测试&#34;重构&#34;,在应用程序运行时测试mutliple数据库层以测试更改,测试新功能,测试重构,......

        你会重构!尽量保持尽可能简单。