首頁  >  問答  >  主體

sharding - 資料庫分庫切表後Java後端程式碼實作以及最佳實踐

現在業務中由於一些表越來越大,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-horizo​​ntally

stackoverflow 上的一些答案

过去多啦不再A梦过去多啦不再A梦2675 天前927

全部回覆(5)我來回復

  • 大家讲道理

    大家讲道理2017-06-23 09:14:49

    可以考慮引入資料庫中間件
    sharding-jdbc client等級
    mycat-server server等級

    回覆
    0
  • 世界只因有你

    世界只因有你2017-06-23 09:14:49

    朋友介紹 Spark 不錯,支援 SQl 式的查詢,1 億個資料約 0.5 秒返回結果

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-23 09:14:49

    只針對目前我們專案中的情況: 在分錶時根據hash演算法落到特定表,然後取的時候先根據演算法取得資料的分佈位置,然後就是正常的select了

    回覆
    0
  • 漂亮男人

    漂亮男人2017-06-23 09:14:49

    不建議連表查詢
    1.資料庫資源比較寶貴,連表查詢會佔用大量的內存,導致資料庫效能下降
    2.不支援資料在多個資料庫實例,分庫情況無法處理,擴充性較差

    通用做法是將連表查詢,查分成多個單表查詢,然後將結果加總。
    1.能夠上述連表查詢的問題
    2.多次查詢也可以在程式中對每一次查詢的中間結果做處理,這是一個靈活性。
    3.應用程式也可以隨時擴展,更有彈性

    如果是離線場景,建議使用MR(mapreduce)框架來處理,例如:hadoop等,對應的,需要將資料寫入hdfs上。

    回覆
    0
  • 欧阳克

    欧阳克2017-06-23 09:14:49

    http://blog.csdn.net/tianyale...
    詳解分庫分錶

    回覆
    0
  • 取消回覆