一、Pipelinedb的實現原理
數據虛擬化是PipelineDB設計的精髓,憑著這種設計,PipelineDB可以只占用較小的硬件資源實現高效的大數據量處理。
PipelineDB的目標是消除許多數據傳輸中的ETL過程。原始數據流式寫入PipelineDB,被已聲明的流式查詢實時地轉換和提取,這使得它在將成型的輸出加載到數據庫前不必周期性地處理顆粒數據,前提是這些處理過程可以通過SQL定義。
在PipelineDB的設計理念中,實用性是名列前茅要素,這也是我們將其包裝為PostgreSQL插件的原因。所有數據存儲和處理都交由PostgreSQL:一個極其穩(wěn)定、成熟以及運用廣泛的數據庫。此外,PipelineDB兼容活躍的PostgreSQL生態(tài)中的所有工具。我們沒有為PipelineDB設計特有的語法甚至是客戶端,因為它可以很好地兼容任何基于PostgreSQL開發(fā)的庫。
延伸閱讀:
二、并發(fā)鎖
在一定條件下,MyISAM也支持查詢和操作的并發(fā)進行。
MyISAM存儲引擎有一個系統(tǒng)變量concurrent_insert,專門用以控制其并發(fā)插入的行為,其值分別可以為0、1或2。
當concurrent_insert設置為0時,不允許并發(fā)插入。
當concurrent_insert設置為1時,如果MyISAM允許在一個讀表的同時,另一個進程從表尾插入記錄。這也是MySQL的默認設置。
當concurrent_insert設置為2時,無論MyISAM表中有沒有空洞,都允許在表尾插入記錄,都允許在表尾并發(fā)插入記錄。
可以利用MyISAM存儲引擎的并發(fā)插入特性,來解決應用中對同一表查詢和插入鎖爭用。例如,將concurrent_insert系統(tǒng)變量為2,總是允許并發(fā)插入;同時,通過定期在系統(tǒng)空閑時段執(zhí)行OPTIONMIZE TABLE語句來整理空間碎片,收到因刪除記錄而產生的中間空洞。