数据库分库切表后Java后端代码实现以及最佳实践

发布于 2022-09-05 05:27:33 字数 1054 浏览 21 评论 0

现在业务中由于一些表越来越大,read的时候压力很大(write的需求比较小),所以在数据库端决定把一些数据量特别大的表切表, 但是在后端代码中有很多代码/query需要做join这些表,请问这样的情况下大家是怎么样解决的?

比如我们现在有 SampleTable 有大概1亿条数据,我们根据逻辑切成了大概16个不同的表:SampleTable 1,SampleTable2...SampleTable31,
以前代码中有query 类似于:

select * from  SampleTable join test_table

现在需要执行这样的query 多次然后把数据聚合起来做为返回结果吗?

select * from  SampleTable1 join test_table

有没有更好的方法或者library推荐?有没有什么beset practice或者sample code?

如果之后我们要多个表拆分到不同的database server上,是否在后端代码得加上不同db 的数据库连接?

数据库Sharding的基本思想和切分策略
这篇文章更多的是数据库切分的策略,是否有人能提供下实际的项目code sample?
Database sharding and JPA
what-to-do-instead-of-sql-joins-while-scaling-horizontally

stackoverflow 上的一些答案

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

謌踐踏愛綪 2022-09-12 05:27:33

朋友介绍 Spark 不错,支持 SQl 式的查询,1 亿条数据 0.5 秒左右返回结果

夜未央樱花落 2022-09-12 05:27:33

只针对目前我们项目中的情况: 在分表时根据hash算法落到特定表,然后取的时候先根据算法获取数据的分布位置,然后就是正常的select了

行至春深 2022-09-12 05:27:33

不建议连表查询
1.数据库资源比较宝贵,连表查询会占用大量的内存,导致数据库性能下降
2.不支持数据在多个数据库实例,分库情况无法处理,扩展性较差

通用做法是将连表查询,查分成多个单表查询,然后将结果在应用中汇总。
1.能够上述连表查询的问题
2.多次查询也可以在程序中对每一次查询的中间结果做处理,这是一个灵活性。
3.应用也可以随时扩展,更加灵活

如果是离线场景,建议使用MR(mapreduce)框架来处理,例如:hadoop等,相应的,需要将数据写入到hdfs上。

柒七 2022-09-12 05:27:33
往日情怀 2022-09-12 05:27:33

根据SampleTable的分表算法对test_table也进行拆分

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文