java - 将 MySQL 数据库拆分为单独的数据库

标签 java mysql database spring hibernate

我要求在我的应用程序中使用的 MySQL 数据库非常积极地扩展。我目前没有迁移到 NoSQL 数据库的状态。

我已经找到了可以尝试将当前数据库拆分为多个数据库的以下区域:

  1. 有些表格的内容是静态的,即几乎没有变化。
  2. 有一些用户表,用于存储在交互时发生巨大变化的用户数据。

现在,如果我将数据库拆分为两个不同的数据库,我将如何处理事务?我将如何编写数据访问层,我将连接到两个数据库吗?该应用程序目前使用 Spring 和 Hibernate 作为后端。有连接当前架构中的用户表和内容表的调用。

架构遵循当前结构: Controller -> 服务 -> DAO 层。

那么,如果我愿意重构与数据库通信的DAO层,我应该遵循什么方法呢?我只知道 Hibernate ORM,但如果有比 Hibernate 更好的东西,我愿意放弃它。

最佳答案

同一台服务器上的多个数据库?这种方法本身可能不会提高性能。 RAM、快速磁盘、优化、分区和正确的索引将带来更大的返回。

如果您在一台服务器上有多个数据库,您可以通过一个连接连接到它们,并且只需在您的 SQL 中使用数据库名称和表名称。事务在单个连接中工作正常。

跨多个连接和多个服务器的事务更难。 MySQL 中有一个称为 XA 事务的功能可以帮助处理这个问题。但它的开销很大,因此最适用于银行业等高值(value)交易。

用行业术语来说,添加服务器称为“横向扩展”。另一种方法是“纵向扩展”,即向单个服务器添加更多 RAM、更快的直接访问存储、优化和其他内容,以使其执行更多操作。

您可以采用多种方法来解决横向扩展问题。经典的方法是使用 MySQL 来设置具有多个负载平衡副本服务器的单个主服务器。这可能是最常采用的路径,因此您无需重新发明很多轮子就可以做到。在此解决方案中,您将所有写入操作都写入单个实例。查找数据的查询可以使用多个只读负载平衡实例。

http://dev.mysql.com/doc/refman/5.5/en/replication-solutions-scaleout.html

这是一种非常流行的方法,您可以混合使用长时间运行的报告查询和短期运行的交互式查询。报告可以在专用的从属服务器上运行。

另一种方法是使用 MySQL 集群进行多主服务器复制。 https://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-replication-multi-master.html

如果您有钱可花,另一种方法是使用受支持的 MySQL 集群。 Oracle、MariaDB 和 Percona 提供此类产品。

无论您如何处理,横向扩展都是一项艰巨的工作。有一些其他人的经验记录。例如,https://www.facebook.com/note.php?note_id=23844338919

关于java - 将 MySQL 数据库拆分为单独的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22299689/

相关文章:

java - InputStream 缓冲数据

mysql - 在 Windows 上使用 MySQL 作为后端的 CLSQL 问题

sql - Oracle 数据库连接字符串 PLSQL 兼容性

c# - 使用 VS 2010 创建的数据库部署网站

mysql - 更新语句给出未知列错误

mysql - 以用户身份访问 vagrant box 之外的数据库

java.lang.ArrayIndexOutOfBoundsException : 49 error - NFA Java 异常

java - 从 Firebase 数据库中按 id 检索对象

java - 在 java spring boot 中使用 Mysql 函数

mysql - mysql如何分配主键或外键的键长度?