Open lihongjie0209 opened 4 years ago
为了解决这类型的问题, 我们通常是建立不同的模型去操作数据库, 比如说写一个复杂SQL然后用自定义的JavaBean来做映射, 这个JavaBean与写入的JavaBean是不同的.
class Log{
int id;
int userId;
}
class LogForRead{
int id;
int userId;
String username;
}
最最最简单的实现了, 我们写一段自定的SQL专门为了查询优化, 最后使用MyBatis之类的工具映射到JavaBean.
优点: 实现简单 缺点: 没有解决读写压力不同的问题.
优点: 不需要改代码, 实现1切换一下数据源就可以了 缺点: 需要考虑数据同步的问题
当我们的查询太过复杂, 关系型数据已经无法满足我们的需求的时候, 我们可以考虑使用非关系型数据库, 同时由于非关系型数据库是基于文档存储的, 我们的查询对象可以不再局限于关系型数据库的二维结构.
优点: 查询性能更好 缺点: 需要改代码, 需要考虑异步数据库的同步问题
简单应用使用实现1 性能不足使用实现2 还是无法满足使用实现3
这三种方案是演进式, 如果没有必要不要上复杂的实现. 同时这三种方案是可以共存的, 没必要把后台管理的一些简单功能放到异构数据库中
普通的应用
读写通常发生在具体的某一张表中.
在实际情况中, 我们通常会遇到一下的问题:
最简单的例子就是按照关系型数据库的范式设计, 我们在写入的时候通常只需要存储关联表的ID, 但是展示的时候需要关联表的额外信息.
我们的写入是单表操作, 但是查询通常需要表连接, 这样就导致了数据库的读写压力不同. 同时我们读写所操作的对象是不同的.