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