首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heroku上的数据库分片

Heroku上的数据库分片
EN

Stack Overflow用户
提问于 2013-02-13 19:16:40
回答 2查看 3K关注 0票数 11

在未来几个月的某个时候,我们的应用程序将达到我们需要分割DB的大小。我们使用Heroku托管Node.js/PostgreSQL堆栈。

从概念上讲,我们的应用程序让每个逻辑碎片表示一个用户和与该用户相关的所有数据是有意义的(我们的应用程序的每个用户生成大量数据,并且用户之间没有交互)。我们需要保留用户对他们的数据进行复杂的临时查询的能力。我读过许多像这样的文章,其中谈到了切分:http://www.craigkerstiens.com/2012/11/30/sharding-your-database/

从概念上讲,我理解切分是如何工作的。然而,在实践中,我不知道如何在Heroku上实现这一点,因为我需要编写哪些代码,以及我需要修改的应用程序的哪些部分。链接到一个教程或一些指针将是非常感谢的。

以下是我已经看过的一些资源:

EN

回答 2

Stack Overflow用户

发布于 2017-04-17 14:05:08

作为第一篇文章的作者,很高兴能进一步阐述。当涉及到切分时,一个非常关键的组件是您正在切分的键。当数据混合在不同的物理节点上时,分片的复杂性就会发挥作用。如果您是一个类似于多租户应用程序,那么就按照租户或客户可以非常干净地安装在这个设置中的概念来建模您的所有数据。在这种情况下,您将希望拆分所有与客户相关的表,并像其他与租户相关的表一样对它们进行分割。

至于在Heroku上这样做,有两种选择。您可以使用Heroku和应用程序逻辑来滚动您自己的应用程序,或者使用类似于Citus这样的工具(这是一个帮助您管理更多此类信息的附加组件。

对于滚动您自己的应用程序,您将首先创建各种应用程序逻辑来处理创建所有碎片,并知道将适当的查询路由到哪里。对于Rails,有一些宝石可以帮助我们实现这一点,比如多租户公寓。当实际移动到切分和迁移时,您想要做的是创建一个Heroku追随者开始。在迁移过程中,您将让它开始不跟随。然后,您将从原始主数据中删除一半数据,从相应分离的跟随者中删除另一半数据。

票数 1
EN

Stack Overflow用户

发布于 2013-04-26 14:22:09

我不确定我会称它为“切分”。

在LedgerSMB中,我们是如何做事的。每个公司(业务实体)都是一个单独的数据库,具有完全独立的数据。数据不能在公司之间共享。一个postgreSQL集群可以运行任意数量的公司数据库。我们有一个管理接口,它创建数据库并加载架构。管理界面还可以创建新用户,这些用户可以在公司之间共享(可选)。我不知道在Heroku上的dbs之间共享用户会有多好,但我在PostgreSQL的工作方式方面包括了这个细节。

所以这是一个可行的方法。

您真正需要的是以自动化的方式拆分数据库和管理用户。在这里,您可以要求用户指定一个公司名称,您可以将其映射到您想要的数据库中(例如,这个映射可以存储在另一个数据库中)。

我知道这是相当高的水平。不过,这会让你开始的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14861237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档