使用分层数据结构对数据库进行分片

Posted

技术标签:

【中文标题】使用分层数据结构对数据库进行分片【英文标题】:sharding a database with hierarchical data structure 【发布时间】:2010-12-22 06:25:16 【问题描述】:

我正在使用 mysql 来存储我的父子关系。数据在一个表中。

我没有任何问题查询;但是,该表的大小急剧增加。我想分片或使用一些技术来提高我的查询(和连接)的性能。我该怎么做?

【问题讨论】:

您的查询速度慢还是只需要执行大量查询?您是否以最佳方式使用索引(据您所知)? 假设数据库拆分可以基于语义字段。对于每个业务领域,该领域的选择很少。它很可能是客户的帐户 ID。 【参考方案1】:

这篇文章中没有足够的信息来给你一个好的答案。 我们需要知道的第一件事是表结构是什么。 您是否定义了非聚集索引,或者它只是一个聚集索引。

您的应用程序使用了这个数据库,它对数据做了什么?

此外,您是在搜索名称字段还是特定日期?如果是这样,这些可能是索引类型的候选者。

要注意的第一件事是索引

【讨论】:

【参考方案2】:

最好使用专业的分片中间件,例如:Apache ShardingSphere

它可以使用简单的方式通过SQL路由对数据库和表进行分片和重写,而无需跨数据库连接。 它可以使用复杂的方式来处理联合跨数据库与联合查询 由 Apache Calcite 提供支持。

【讨论】:

【参考方案3】:

我认为,如果您的产品变得如此庞大,您将需要更高级的帮助。 dbShards 是一个很好的起点。他们将帮助您为数据设计分片策略,并且可以轻松地对任何需要它的表进行分片。如果你的一个表变得太大,分片不是一个糟糕的选择。我会检查 dbShards。可能适用于这种情况。

【讨论】:

链接看起来像广告。它可能被放弃/出售了吗?

以上是关于使用分层数据结构对数据库进行分片的主要内容,如果未能解决你的问题,请参考以下文章

如何对 BigQuery 表进行分片?

使用闭包表对分层数据进行分页(MySQL)

使用 n-d numpy 数组作为索引对 Panda 的数据帧进行分层索引

如何对数据按某列进行分层处理

如何对数据按某列进行分层处理

MongoDB分片