(开源)云文件系统在其上运行数据库?

(开源)云文件系统在其上运行数据库?

当前有哪些“技术和实现”可以通过使用单个服务器及其硬盘来形成“网格/云文件系统”来获得无限容量的文件系统?

我需要有无限的空间(通过添加更多服务器),但它必须是一个能够在其上运行数据库的文件系统。

我知道 Apache Hadoop,但它似乎并不是在其上运行 DB 的理想选择(或者我错了??)

而且 iSCSI 似乎是“远程/网络化的”,但我不知道它如何以及是否可以集群?

非常感谢!jens

答案1

两个词:愚蠢的想法。这就像问“驾驶一辆 40 吨重的卡车在一级方程式赛车中获胜的最佳方法是什么”。分布式文件系统和数据库存储系统之间的设计原则是正交的 - 它们的目标完全不同。实际上,大多数合适的数据库都会尝试存在于几个文件中 - 因此它们最终会存在于一个(不受控制的)节点中(每个文件)。

对于数据库,您需要定义 IO 性能,认真优化延迟 - 您执行大量非常时间关键的 IO。实际上,更大的数据库存储系统是围绕 IOPS(每秒 IO 操作)设计的 - 优化延迟。存储大小通常并不重要 - 在 SSD 出现之前,您购买磁盘主要不是为了空间,而是为了 IO 性能。我曾经有机会使用在 SAN 中分布超过 190 个磁盘的数据库 - 因为它需要巨大的 IO 性能。这些磁盘并不是特别满。

对于分布式文件系统,您需要易于管理、位置透明、关注存储大小而不是定义的 IO 性能。实际上,您无法保证 IO 性能达到足够好的水平,因为您得到的是下面非常不可靠(例如:可以更改)的基础设施。您依赖缓存来处理许多部分的性能,这与数据库本身所做的工作是多余的,并且在适当优化的数据库场景中根本不起作用。

一个是用于运输大量物品的 40 吨卡车,另一个是经过精心调校的一级方程式赛车。你永远不会把它们放在同一条船上,因为它们是基于不同的假设设计的。

答案2

除非节点之间有很大的带宽,否则我认为这不会成功。

例如,您可以使用 drbd 设置分布式块设备,并在多个盒子上运行 RAID 设置,在单个节点上安装 fs 并运行数据库服务器。但除非您具有 LAN 级通信性能,否则性能会很差。

您在数据库中存储了哪些内容,而这些内容无法容纳一台服务器?购买多个盒子真的比购买一台大型服务器更便宜吗?

您研究过分片吗?

您是否将文件存储在数据库中?如果是,您能将它们分开吗?

答案3

这取决于您所谈论的数据库的类型。

如果您正在寻找基于 SQL 的数据库,例如 MySQL 或 PostgreSQL,那么您就找错了方向(有几个有趣的例外,见下文)。

如果您尝试运行诸如 Cassandra 或 HBase 之类的高级键值存储,请继续阅读。当分区算法是保序算法时,您可以执行与在 SQL 中执行的操作类似的操作,只是您必须手动进行连接,并且您可以获得能够对聚合和更复杂的分析任务进行 map-reduce 的优势(取决于 DB 平台),可能借助 Pig 和 Hive 等项目。

对于 Cassandra,您不需要特定的文件系统。同样,如果您需要运行查询并且拥有类似于索引的东西,您将需要使用保序分区算法。

对于 HBase,您需要使用 HDFS 作为基础 FS。HyperTable 过去可以在 HDFS 或 KFS 下工作;目前,我没有看到任何关于 KFS 的提及,但我也看到了一些关于能够像 Cassandra 一样以独立方式工作的内容。我不太确定 HyperTable 上的分区和排序,但我知道 HBase 默认按顺序存储记录并支持索引。

现在来看看有趣的例外。

那里一个叫做Hadoop 数据库它将 PostgreSQL 与 Hadoop 集成在一起,并且可能根据您要执行的操作满足您的需求。

还有一个疯狂的想法,即为 MySQL 编写一个存储引擎,与上述系统之一进行交互。MySQL 会为您完成连接和聚合等工作,而数据存储、索引和检索则由您自己负责。如果您选择支持事务,您还需要协调事务。这意味着您可以让多个负载平衡的 MySQL 服务器与一个巨大的 HBase 集群通信。您唯一缺少的是推出 map-reduce 任务的能力,以使对大量数据集的聚合和分析更加高效。但您可以定期在 MySQL 之外执行此操作,并将分析结果存储在另一个可以使用 MySQL 查询的表中,同样,这取决于您的需要。

答案4

一个相对简单的方法是在 Linode 等提供商处创建虚拟机安装。他们提供大多数 Linux 发行版的预安装版本。

在 LVM 下管理您的存储。如果您需要更多存储,提供商可以为您添加 - 只需让 LVM 将附加卷添加到卷组即可。

您使用哪种文件系统是一个单独的问题。

相关内容