我正在开发一个 Web 应用程序,对于每个客户(一个小型大型组织),他们不能(也不应该)能够查询其他客户的记录。
将数据保存在单个数据库中会很容易,并且使更新和维护变得简单(直到我遇到可伸缩性问题)。但我现在想对应用程序进行未来验证。如果每个客户端的数据都包含在隔离的数据库中,那么每个客户端都会有更好的性能并且应该可以更好地扩展。我不确定它是否等同于数据库“分片”,因为我没有在多个数据库中划分单个模式。我基本上会在每个数据库中复制一个单一的模式(就像你在 CD 上发布软件的日子一样——每个都有自己的数据库)。
我已经对此进行了一些阅读,因此我对一般概念有所了解。但是,我脑子里有很多问题。我不确定这个过程有多透明。或者,每当我想推出更改时,我会遇到更新数百个模式的维护噩梦。
真的,我只是在寻找一个简单的“完整”示例(希望使用 spring/java)。
我想我可以有一个应用程序服务器从一个数据源开始,假设一个 mysql 实例具有一个将用户 ID 映射到数据库的表。
- 用户身份
- 数据库/分片 ID
对于每个请求(查询),忽略数据库缓存,是否必须为用户查找分片 ID?或者这是它最初可以在每个会话中执行一次并直接与目标数据库对话的事情?(你可能会说我不擅长服务器端的东西)。
有人可以对这在 Spring 中可能如何连接进行高级概述吗?目前,我的架构非常简单。我有使用 jdbctemplate 的简单 Spring 组件 DAO。注入 DAO 的数据源(数据源在 applicationContext.xml 上配置)。DAO 自动连接到我的服务类中。很标准的东西。
假设我让上一步工作,现在我必须更改架构。是否有管理工具可用于一次应用架构更改并将其传播到 100 个其他数据库?
我正在使用 MySQL。我相信“MySQL 代理”可能能够解决问题 1 和 2。有没有人有这方面的经验?我想它无法处理管理模式更新,所以我可能不得不推出自己的解决方案。
谢谢!