dblink查詢_分庫數據如何查詢統計

分庫后的計算不能直接使用SQL;異構庫 SQL 函數不盡相同;JAVA 硬編碼實施難度大;即使借助透明網關訪問遠程數據庫,分庫性能優化也是頭疼問題。

一般常規辦法:

方法1:java硬編碼

簡單的跨庫count運算,Java部分代碼大概要寫成這樣:

public Connection getConnection(String drivername,String url, String username, String password) {

try {

Class.forName(drivername);

conn = DriverManager.getConnection(url, username, password);

} catch (Exception e) {

System.out.println("DBUtils.getConnection_FAILED!");

e.printStackTrace();

}

return conn;

}

Connection conn1 = DBUtils.getConnection(URL1, USER1, PASSWORD1);

Connection conn2 = DBUtils.getConnection(URL2, USER2, PASSWORD2);

String sql = "select count(*) c from sales";

PreparedStatement ptmt1 = conn1.prepareStatement(sql);

PreparedStatement ptmt2 = conn1.prepareStatement(sql);

ResultSet rs1 = ptmt1.executeQuery();

ResultSet rs2 = ptmt2.executeQuery();

return rs1.getInt("c") + rs2.getInt("c");

方法2:透明網關

例如oracle的dblink

8ee7d01a1e615a04bece356c875c7bd9.png

帶有DBLINK的SQL,優化起來很復雜。可以通過分析執行計劃,利用collocated inline view,driving_site hint 等手段,來優化這些帶有DBLINK的SQL。但這即使對于一名經驗豐富的DBA來說,也是件很頭疼、很費勁的事。

這種情況下,如果有集算器就簡單很多,看下面這個例子:

n個庫的count運算。該運算需要在各分庫中分別進行 count,對各分庫的結果,在匯總階段要用sum求和,集算器(SPL)僅4行就可以搞定了。

AB1=n.(connect("mysql"+string(~)))//獲取n個分庫的連接2=SQL="select count(*) c from sales"//需要在分庫中執行的SQL3=A1.(~.cursor(SQL))//在n個分庫中執行 SQL4=A3.conjx().total(sum(c))//將各分庫算出的count值進行匯總

即使分庫數據庫為異構的情況,集算器也可以通過SQL翻譯功能方便地進行SQL轉化,為不同數據庫提供可執行的SQL。

利用集算器還可根據數據特征,輕松寫出具有針對性的高性能代碼,無需大量硬編碼,即可實現高效的算法 。諸如排序、top、分組、去重、連接等各類分庫運算,都可以輕松實現,感興趣可以參考:分庫后的查詢統計

集算器還很容易嵌入到Java應用程序中,Java如何調用SPL腳本有使用和獲得它的方法。

關于集算器安裝使用、獲得免費授權和相關技術資料,可以參見如何使用集算器。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457821.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457821.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 爬取大樂透開獎結果

#codingutf-8 #下面中文注釋不支持 所以開頭加 "#codingutf-8" # 獲取近期大樂透開獎結果, 并給出自己猜中的個數import requests# 這個API能夠免費得到近期開獎結果, url里的-20代表獲取近20期的開獎信息 url "http://f.apiplus.net/dlt-20.json" re…

【Python五篇慢慢彈(5)】類的繼承案例解析,python相關知識延伸

類的繼承案例解析&#xff0c;python相關知識延伸 作者&#xff1a;白寧超 2016年10月10日22:36:57 摘要&#xff1a;繼<快速上手學python>一文之后&#xff0c;筆者又將python官方文檔認真學習下。官方給出的pythondoc入門資料包含了基本要點。本文是對文檔常用核心要點…

課堂練習之小強大掃蕩

標題&#xff1a;在將程序安裝到新的手機上時會出現程序崩潰 解決&#xff1a;1、找出錯誤&#xff1a;經過一系列測試&#xff0c;發現問題出現在第一次訪問數據庫的代碼時報錯。錯誤原因為不能發現數據庫中的建立的表。 2、如何解決&#xff1a;在主頁面加入訪問數據庫語句。…

領域驅動設計:軟件核心復雜性應對之道_人人都可以領域驅動設計(一)

最近幾年&#xff0c;領域驅動設計&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;這個術語越來越多地出現在軟件工程師的視野里。對DDD不熟悉的人可能會覺得它是軟件領域里的一個新的概念&#xff0c;但是實際上&#xff0c;Eric Evans在十幾年前就已經提出了這…

linux 進程通信 消息隊列

詳解linux進程間通信-消息隊列 前言&#xff1a;前面討論了信號、管道的進程間通信方式&#xff0c;接下來將討論消息隊列。 一、系統V IPC 三種系統V IPC&#xff1a;消息隊列、信號量以及共享內存&#xff08;共享存儲器&#xff09;之間有很多相似之處。 每個內核中的 I P …

laravel框架——composer導入laravel

第一種&#xff1a;  composer create-project --prefer-dist laravel/laravel projectName "5.2.*"第二種&#xff1a;  composer global require "laravel/installer"  laravel new 名稱轉載于:https://www.cnblogs.com/xj76149095/p/5951822.html…

第七章 心得體會

通過第七章的學習&#xff0c;使自己對驅動程序的認識更加深刻&#xff0c;LED燈的驅動程序幫我我學到很多&#xff0c;還學會了驅動的移植。 學到的知識&#xff1a; 一、編寫LED驅動 1、創建LED驅動的設備文件 第一步&#xff1a;使用cdev_init函數初始化cdev leds_cdev.owne…

wx.checkjsapi是寫在config里面嗎_用Python寫一個程序,解密游戲內抽獎的秘密

前言本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。作者&#xff1a; 極客挖掘機PS&#xff1a;如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun分析需求我們先整理下思…

Dev C++安裝第三方庫boost

Dev_C安裝第三方庫boost 安裝步驟 準備工作下載boost庫&#xff0c;下載地址https://sourceforge.net/projects/boost/1. 設置GCC的環境變量PATH 設置環境變量path,在其中加上DEV-C編譯器的路徑&#xff08;gcc.exe所在路徑&#xff09;&#xff0c;如C:\Program Files (x86)…

bash的一些小技巧

1、從輸入讀入變量 eg:read -ep "input yes or no: " flag 用e選項表示編輯&#xff0c;可以使用backspace刪除 2、數組 a、索引數組 declare -a arr(var1 var2 var3) 用空格分割&#xff0c;如果直接訪問變量$arr&#xff0c; 則獲取的是數組的第一個元素&#xff0…

golang switch_為什么程序員都不喜歡使用 switch ,而是大量的 if……else if ?

點擊上方“我要學編程”&#xff0c;選擇“置頂/星標公眾號”福利干貨&#xff0c;第一時間送達&#xff01;來自 | C語言Plus請用5秒鐘的時間查看下面的代碼是否存在bug。OK&#xff0c;熟練的程序猿應該已經發現Bug所在了&#xff0c;在第13行下面我沒有添加關鍵字break; 這就…

RabbitMQ 安裝與簡單使用

在企業應用系統領域&#xff0c;會面對不同系統之間的通信、集成與整合&#xff0c;尤其當面臨異構系統時&#xff0c;這種分布式的調用與通信變得越發重要。其次&#xff0c;系統中一般會有很多對實時性要求不高的但是執行起來比較較耗時的地方&#xff0c;比如發送短信&#…

數據庫函數依賴及范式

一、基礎概念   要理解范式&#xff0c;首先必須對知道什么是關系數據庫&#xff0c;如果你不知道&#xff0c;我可以簡單的不能再簡單的說一下&#xff1a;關系數據庫就是用二維表來保存數據。表和表之間可以……&#xff08;省略10W字&#xff09;。   然后你應該理解以下…

windows svn

windows svn 1.1Svn和VisualSvn介紹 VisualSvn Server2.5.6&#xff08;版本控制服務器&#xff09;免費開源軟件 是基于Windows平臺上的Subversion服務器&#xff0c;它是免費的 官方下載&#xff1a; http://www.visualsvn.com/files/VisualSVN-Server-2.5.6.msi TortoiseSvn…

信息摘要技術及算法介紹

數據摘要算法是密碼學算法中非常重要的一個分支&#xff0c;它通過對所有數據提取指紋信息以實現數據簽名、數據完整性校驗等功能&#xff0c;由于其不可逆性&#xff0c;有時候會被用做敏感信息的加密。 數據摘要算法也被稱為哈希&#xff08;Hash&#xff09;算法、散列算法…

AutoLayout的那些事兒

AutoLayout非常強大也非常易用&#xff0c;可讀性也很強&#xff0c;加上各種第三方AutoLayout庫&#xff0c;讓你布起局來猶如繃掉鏈子的狗&#xff01;根本停不下來&#xff01;以前的 1label.frame.origin.y label.frame.size.height 10如今只用&#xff1a; 123button.sn…

docker-compose下載慢_編寫Docker Compose時要注意的五大常見錯誤

在構建容器化的應用時&#xff0c;開發人員往往需要某種方法來引導啟動目標容器&#xff0c;以對其進行代碼級別的測試。盡管業界有許多方法可以實現該目的&#xff0c;但Docker Compose是目前最受歡迎的一種方法。它能夠讓如下兩個方面變得容易實現&#xff1a;指定在開發過程…

前端測試利器--Browser-Sync啟動命令

使用browser-sync啟動命令cmd切換到項目的根目錄下**1.browser-sync start --server --files "css/*.css"----------**使用兩個*檢測所有的目錄**轉載于:https://blog.51cto.com/1888512/1862054

VMware實現Android x86 8.1 從安裝到使用

VMware實現Android x86 8.1 從安裝到使用 虛擬機--Android 安裝 Android系統配置 安裝軟件 個性化設計 托坑指南 一些終端模擬器的指令 虛擬機–Android 發現現在安卓虛擬機已經到了8.1&#xff0c;我就試試能不能安裝并正常使用。由于版本過新&#xff0c;網上也沒有一些系統的…

frame越過另一個frame_擁抱swoole(三)之用php實現一個混合服務器

混合服務器&#xff0c;就是可以同時支持http&#xff0c;websocket&#xff0c;tcp等的服務器&#xff0c;用swoole就是這么簡單&#xff0c;分分鐘&#xff0c;就可以愉快地搞物聯網開發了&#xff0c;啥都支持&#xff0c;我采用官方的例子&#xff0c;創建一個混合服務器&a…