技术文章
本篇说明 O2OA 服务端在多数据库场景下的配置思路:数据存储由 openjpa 完成对象与表的映射,连接池负责实际访问,当单库容量或并发成为瓶颈时,可借助数据库中间件或增加数据库实例分担压力。文中还提到类名与表名需保持互斥、不同数据源之间的切换方式,以及组合配置时的注意事项,便于按业务规模规划存储结构,并评估后续扩容与运维成本。
o2server 的数据存储由 openjpa 完成 ormapping 映射,再通过 durid 连接池访问数据库;当数据量增长到单库难以承载时,可以通过数据库中间件或配置多数据库来分担压力。
数据库中间件配置可以参考:mysql 实现数据库读写分离搭建高负载 o2server 集群
o2server 同时支持在业务层面实现数据分库存储.可以通过在:
o2server/externalDataSources.json
通过配置实现针对不同的数据进行分库存储,实际环境中已完成工作,已办,已阅会随着使用年限的增长不断增加,但访问较少(冷数据),通过下面的配置我们将已完成工作,已办,已阅存储到独立的数据库 db2中,其他数据则存储到默认的 db1中.这样可以较好的存储数据而不用经常考虑扩容和性能问题.
[
{"url":"jdbc:mysql://192.168.100.1:3306/db1?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8", "username" : "root","password" :"123456","includes": [],"excludes": [
"com.x.processplatform.core.entity.content.WorkCompleted",
"com.x.processplatform.core.entity.content.TaskCompleted",
"com.x.processplatform.core.entity.content.ReadCompleted"
],"enable" : true},
{"url":"jdbc:mysql://192.168.100.2:3306/db2?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8", "username" : "root","password" :"123456","includes": [
"com.x.processplatform.core.entity.content.WorkCompleted",
"com.x.processplatform.core.entity.content.TaskCompleted",
"com.x.processplatform.core.entity.content.ReadCompleted"
],"excludes": [],"enable" : true}
]在第一条配置中将配置数据库链接到 db1,由于数据是通过 ormapping 映射到数据库表的,数据库表是通过 entity 的 java 类名进行标识的.
已完成工作:com.x.processplatform.core.entity.content.WorkCompleted
已办:com.x.processplatform.core.entity.content.TaskCompleted
已阅:com.x.processplatform.core.entity.content.ReadCompleted
在 excludes 中将这三个类排除在外 在第二条配置中将配置数据库链接到 db2,在 includes 中包含在第一条配置中排除的类. 这样这三个类关联的数据库表将存储到 db2中. 这样就可以实现在业务层面实现数据库分库存储.
多数据库配置时,类名与表之间必须保持互斥。
也可以结合"数据库中间件" 和 "配置多数据库" 实现复杂的数据库分库分表配置.
上述配置可以组合使用,从而对数据存储实现更精细的控制。
相关问题讨论
windows 环境下启动失败 Exception: can not define o2server base directory.
o2server/externalDataSources.json
查看原帖讨论 · 12,273 次浏览
关于运行 o2server 报 NoClassDefFoundError: org/apache/logging/log4j/core/Layout 的问题
o2server 数据存储通过 openjpa 实现 ormapping,再通过 durid 的数据库连接池实现和数据库的连接.所以 o2server 可以使用各种数据库中间件(数据库代理)实现数据库的分库分表存储.
查看原帖讨论 · 11,173 次浏览
相关内容