oneproxy中間件架構及注意事項

分佈式數據庫實現方案總體劃分爲兩類:
一類是程序客戶端實現,對一個已有的業務來說,會涉及過多的代碼改動甚至是程序邏輯上的調整。
另一類是採用中間件proxy方案,前段代碼改動小,通過proxy實現。

架構圖如下:

wKiom1XRQuuzA2OPAAGFsXyjpW0885.jpg


---------------------------------------------------------------------------------------
這裏總結一下JAVA程序mybatis框架連接後的注意事項:
1、不支持 Server Side Cursor 接口,比如 MySQL C API 裏的 Prepare、Bind、 Execute調用接口
2、不支持 use命令切換數據庫
3、默認禁止 CALL, PREPARE, EXECUTE, DEALLOCATE 命令,也就是說不能用存儲過程
3、單庫(單實例)分表--insert/update/delete要加字段名,如insert into t1(id,name) values(1,'張三');
4、單庫(單實例)分表--目前分了N張表,如果以自增id做關聯查詢,那麼每張表的自增id都是從1開始,在與其他表join關聯查詢時,數據會不準確
5、單庫(單實例)分表--當where條件有分區列時,值不能有函數轉換,也不能有算術表達式,必須是原子值,否則結果不準確
6、分庫分表(多實例)--不支持垮庫join,例如user_0表在10.0.0.1機器裏,現在要join關聯查詢10.0.0.2機器裏的money_detail表,不支持
7、分庫分表(多實例)--不支持分佈式事務,例如user_0表在10.0.0.1機器裏,user_1表在10.0.0.2機器裏,現在想同時update更新兩張表,不支持

---------------------------------------------------------------------------------------
8、讀寫分離 --默認讀操作全部訪問slave,如果想強制走主庫,例如涉及金錢類的查詢操作,SQL改爲select /*master*/ from t1 where id=1;

9、分庫分表/分表 --where條件帶分區列時,直接命中該表,如果未帶分區列,會逐一掃描所有分表(單線程),考慮性能問題,要加並行查詢(多線程),SQL改爲select /*parallel*/ from t1 where name='李四'; 並行查詢會增加額外的CPU消耗
----------------------------------------------------------------------------------------
10、分表規則:支持range(範圍),hash(取模),hash規則要提前規劃好,具體分多少張表,如前期分64張表,1年後想擴容128張表,數據需要重新導出導入,成本非常高,目前二級分表還不支持。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章