我们能推荐一个水平扩展的数据库吗?
通常,数据库服务器是我们必须购买的最大,最昂贵的服务器,因为垂直扩展是唯一的选择。是否有任何横向扩展良好的数据库(即跨多个商用机器),这种方法的局限性是什么?
解决方案
回答
有诸如JavaSpaces(或者诸如Gigaspaces之类的商业实现)之类的存储技术,它们提供了对对象的高度可伸缩,快速和安全的访问。
也有分布式缓存系统,例如memcached,提供了类似的方法。
当然,这些都不是真正的数据库,但是在适当的架构下,它们可以与数据库一起工作以提供大量的水平可伸缩性。真正的问题是,如果我们想要数据库附带的所有ACID优势,那么必然会遭受某些不可避免的性能损失。唯一的方法是找出不需要ACID的位,并使用其他技术来为这些位提供服务。
回答
Netezza和其他数据仓库设备以这种方式扩展,但是它们不适用于OLTP和Web应用程序工作负载。
回答
用于在多台计算机上扩展的Oracle路由称为Real Application Clusters(Oracle RAC)。关于此的文档无止境。我们可以尝试从http://www.oracle.com/database/rac_home.html开始。
回答
Oracle RAC-实际应用程序集群
这很好用,我们只需将框添加到群集中。我们可以从一个盒子故障转移到另一个盒子。它不是复制,所有盒子都是同一逻辑单元的一部分。
当然,这很花钱。
回答
Oracle RAC是数据库的劳斯莱斯,可以相对轻松地添加额外的硬件节点并进行硬件故障转移。
但是,商品硬件成本将与许可成本相形见war。
为什么我们觉得需要水平缩放。具有40GB RAM和SAN存储的多CPU核心服务器可以支持非常大的数据库安装。
我们可以提供任何规模和预期活动信息以更好地了解问题吗?
回答
不用担心,好的解决方案即将到来!
Couchdb和Hypertable是开源的,仍处于Alpha状态,但是显然它们的设计旨在使在商品软件上的扩展变得简单。它们工作得很好,并且可能会改变我们对数据库的看法。
另外,如果可以允许其他人为我们进行分发,则Google AppEngine和Amazon SimpleDB都是非常便宜的分布式数据库服务,尽管它们现在都处于beta测试阶段,所以施加了严格的限制。
回答
Oracle Real Application Clusters。如果我们想要最好的,那就看看吧。
回答
如果我们认真地认为自己会扩展一个像样的多核" Big Iron"盒子,那么我们就考虑对数据进行分区。这是一种与数据库无关的好方法,可以进行横向扩展。
水平的所有数据库将付出巨大的代价。
除非我们有大量资金要解决这个问题,否则请不要考虑RAC。虽然它非常好,但是一旦扩展到超过2个节点,它的价格将非常昂贵。
回答
如果我们确实走了RAC路线,则应记住它不会永远水平扩展。甚至销售人员也承认90%的rac客户是4个节点或者更少。一旦我们获得的收益超过收益,收益就会递减。因此rac可能会为我们工作,但不能保证是答案。
回答
MySQL:http://www.mysql.com/why-mysql/scaleout.html
局限性在于它最适合于只读工作负载。通常,我们有一个接收所有写入的"主"设备,以及复制这些写入的许多"从"设备。然后,将读取的数据分布到所有数据库中。
MySQL复制是异步的,因此我们可能必须处理时间滞后问题(先写入主服务器,然后在复制写入之前从从服务器读取)。
回答
Oracle RAC根本不能水平扩展,因为所有Oracle实例共享同一数据存储。是的,有了SAN的东西,我们可以获得一个大尺寸的数据库,但是它根本无法扩展。换句话说,Oracle RAC仍然是一种向上扩展的方法。因此,对于横向扩展或者水平扩展,必须按功能对数据进行分区,这意味着将不同的表组放置在不同的数据库中。或者按表划分数据,这意味着将一个表划分为多个具有相同模式但存储在不同数据库中的子表。这样,我们可以获得横向扩展解决方案。有很多资源。在Web 2.0网站体系结构博客领域,分片一词一直是流行语。
由于分片本身不受数据库本身的直接支持,因此我们必须构建自己的解决方案。但正如我所说,已经有很多教训。对于oracle,可以使用分区表。对于mysql,请检查此问题