分布式数据库解决方案?

3
嘿,我打算建立一个可能非常庞大的数据库。
我大多数情况下都使用标准的mysql,但是这个特定的问题将会达到TB级别,我希望能够每秒执行数百个查询。
因此,除了设计我的数据库模式以避免出现瓶颈和快速硬盘速度外,我的最大瓶颈是什么,什么样的解决方案是推荐的?
将数据库分布在我的内部网络上的多台计算机上,以便它可以与CPU / RAM等一起扩展,这样做有意义吗?如果是,是否有相应的软件或数据库解决方案?
感谢任何帮助!我搜索了相关的问题,但没有找到任何东西,所以如果已经问过了,请原谅。
4个回答

1

数据库的可扩展性是一个非常复杂的问题;整个过程中有很多问题需要考虑。

首先,考虑最简单的解决方案;你是否有包含大量数据的单独表格(或列)?是否有包含每个BLOB都大于4MB的列?这些可以从数据库中提取出来并存储在平面文件存储系统中,然后仅从数据库中引用;这样一来,许多难以处理的解决方案就可以降到一个可管理的水平。

如果没有,你是否有不同子组表的深度使用模式?如果是这样,那么就有机会将数据库分成不同的功能数据库,并将其分区到不同的服务器上。一个很好的例子是只读数据,例如在Web服务器上生成的数据,它很少被生成(想象一下用户特定的主页数据),但经常被读取;这种类型的数据可以被隔离到一个与其他用户数据分开的数据库(或者再次使用带有引用的平面文件)中。

考虑你的数据库的事务要求;你能够干净地隔离你的事务边界吗,还是会有深度交织的事务在整个数据库中进行?如果你能够隔离你的事务边界,那么又有另一个潜在的有用边界。

这只是涉及到这种事情的一些问题。值得考虑的一件事是,您是否真的需要一个实际上会变得非常庞大的数据库,还是只是想将数据库用作持久性层。如果您只是将数据库用作持久性层,您可能需要重新考虑是否真正需要数据库的关系性质,或者是否可以在更简单的持久性层之上使用较小的关系性覆盖层。(我之所以这样说,是因为许多解决方案似乎可以通过在大型持久性层上使用薄的关系层来解决问题;这值得考虑。)


为了让您更了解实际问题,我们将从大量来源中提取大量数据,并从每个条目中解析大量统计信息。每天数据库将处理100,000多个新条目,每个条目都有数百个统计数据。每个条目的实际文件大小可能小于1KB,一旦解析完成,就不需要使用它。然后,我们将在不断增长的数据集上实时运行许多不同的查询,并最终为其他人开放平台以执行相同的操作。 - Luke Belbina
1
@nextgenneo:是的,你确实有点麻烦。我仍然建议你尽力合理地分区数据库;是否存在某种时间范围,你不会越过或类似情况?因为如果你真的拥有一个大型、无法进行分区的关系型数据集,你可能需要采用(非常昂贵的)商业解决方案。我并不是Oracle的粉丝(可以这么说),但他们比任何人都更好地理解史诗级扩展。 - Paul Sonier

1

好的,首先我需要指向这里。 我认为MySQL不会像你想的那样运行。我有一种不好的预感,当我告诉你需要研究Oracle安装时,你会说:“我们没有足够的资金。” 但是,当我建议使用最新/最好的SQL-Server时,你会说:“我们没有实施所需的硬件。” 我担心,如果你使用MySQL,那么数据量将会压垮它。


1
鉴于他在我的回答评论中的澄清,我觉得你可能是对的;而且你关于Oracle的观点完全正确。Oracle非常适合作为一个现金池,一旦你和他们在一起,就没有回头路了;尽管如此,在他们专业化的可扩展性方面,他们确实是唯一的选择。 - Paul Sonier

0
正在构建一种新型的 NewSQL 数据库,专门解决资源分配在多个服务器上的问题。 Clustrix 数据库(从头开始构建用于替代 MySQL)是其中一个示例,它提供接近线性的扩展能力 - 当您的 CPU / 内存不足时,只需添加节点即可。

0

数据库的可扩展性是一个棘手的问题,您应该考虑可以为您解决这个问题的解决方案。我相信MySQL可以作为解决方案的基础。

水平扩展;即水平扩展数据库(也称为横向扩展)是解决非常大的表和数据库问题的好方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接