通常数据库服务器是我们必须购买的最大,最昂贵的盒子,因为垂直缩放是唯一的选择。是否有任何数据库可以横向扩展(即跨多个商用机器),这种方法的局限性是什么?
答案 0 :(得分:7)
Oracle RAC根本不是可水平扩展的,因为所有Oracle实例共享相同的数据存储。是的,使用SAN的东西,你可以得到一个大尺寸的数据库,但它根本不可扩展。换句话说,Oracle RAC仍然是一种扩展方法。因此,对于向外扩展或水平扩展,您必须按功能对数据进行分区,这意味着将不同的表组放在不同的数据库中;或者对每个表的数据进行分区,这意味着将一个表分成多个具有相同模式但存储在不同数据库中的子表。通过这种方式,您可以获得横向扩展解决方案。有很多资源。在Web 2.0网站架构博客领域,Sharding一直是个热门话题。 由于数据库本身不直接支持Sharding,因此您必须构建自己的解决方案。但正如我所说,已经有很多教训。对于oracle,可以使用分区表。对于mysql,请检查this question
答案 1 :(得分:5)
Oracle RAC - Real Application Cluster
这很好用,您只需向群集添加框即可。您可以从一个盒子故障转移到另一个盒子。它不是复制,所有框都是同一个逻辑单元的一部分。
当然,这非常花钱。
答案 2 :(得分:4)
别担心,好的解决方案即将来临!
Couchdb和Hypertable是开源的,仍处于alpha状态,但它们显然旨在简化商品软件的扩展。它们运行良好,可能会改变您对数据库的看法。
此外,如果可以让其他人为您分发,Google AppEngine和Amazon SimpleDB是非常便宜的分布式数据库服务,尽管它们现在都处于测试阶段,因此会施加严格的限制
答案 3 :(得分:2)
存在诸如JavaSpaces(或诸如Gigaspaces的商业实现)之类的存储技术,其提供高度可扩展,快速和快速的存储技术。安全访问对象。
还有分布式缓存系统,例如memcached,它提供了类似的方法。
当然,这些都不是真正的数据库,但它们可以与数据库结合使用,在给定合适的体系结构的情况下提供大量的水平可伸缩性。真正的问题是,如果你想要数据库附带的所有ACID优点,那么某些不可避免的性能损失。唯一的出路是找出不需要ACID的位,并使用其他技术来处理这些位。
答案 4 :(得分:2)
Oracle RAC是数据库的劳斯莱斯,允许相对容易地添加额外的硬件节点和硬件故障转移。
但是,许可证成本会使您的商品硬件成本相形见绌。
为什么你觉得你需要横向缩放。具有40GB RAM和SAN存储的多CPU核心服务器可以支持非常大的数据库安装。
您是否可以提供任何尺寸和预期的活动信息,以便更好地了解您的问题?
答案 5 :(得分:2)
如果你确实沿着RAC路线走下去,那么值得记住它不会永远水平扩展。甚至销售人员也承认,90%的rac客户是4个节点或更少。一旦你走得更远,你就会收益递减。所以rac可能适合你,但不能保证答案。
答案 6 :(得分:2)
MySQL:http://www.mysql.com/why-mysql/scaleout.html
限制是它最适合以读取为主的工作负载。您通常有一个“主”接收所有写入,而许多“从属”复制写入。然后在所有数据库上分发读取。
MySQL复制是异步的,因此你可能不得不处理时滞问题(你写入主服务器,然后在复制写入之前从服务器读取)。
答案 7 :(得分:1)
Netezza和其他数据软件设备以这种方式扩展,但它们不适合OLTP和Web应用程序工作负载。
答案 8 :(得分:1)
用于跨多台计算机进行扩展的Oracle路由称为Real Application Clusters(Oracle RAC)。其他地方的文件没有结束;您可以尝试从http://www.oracle.com/database/rac_home.html开始。
答案 9 :(得分:0)
Oracle Real Application Clusters。如果你想要最好的,那就去看看吧。
答案 10 :(得分:0)
如果您认真考虑将扩展一个体面的多核“Big Iron”框,那么您可以考虑对数据进行分区。这是一种很好的,与数据库无关的扩展方式。
所有水平数据库都将付出沉重代价。
除非你有超级美元来解决这个问题,否则请忘掉RAC。虽然非常好,但一旦超过2个节点就非常昂贵。
答案 11 :(得分:0)
MongoDB 是水平扩展的最佳数据库之一。
答案 12 :(得分:0)
您可以查看DashDB for OLAP - IBM将其与Cloudant for OLTP配对。 https://www.ibm.com/developerworks/community/blogs/5things/entry/5_things_to_know_about_dashdb_placeholder?lang=en