近日,位於舊金山的Stripe公司發布了MoSQL,該款工具可以通過複製的PostgreSQL資料庫輕鬆從MongoDB產生報表。MoSQL基於MongoRiver,這也是Stripe的產品,可以在幾乎即時的情況下監控MongoDB的資料更新。
MoSQL的目標旨在類比傳統的RDBMS設計,其報表與即時查詢都是在產品資料的唯讀副本上進行的。在提供給商務分析師之前,這個唯讀副本通常都需要經過幾次轉換,因此大家對此應該不陌生。
MongoRiver
MongoRiver是個通用庫,用於MongoDB oplog tailing,它使用Ruby編寫,開發人員可以通過MongoRiver查看MongoDB執行個體的更新操作。目前關於MongoRiver的文檔還不多,其github網站也只提供了原始碼。MongoRiver基於MIT許可。
MoSQL
MoSQL構建在MongoRiver之上,它會執行實際的資料轉換。它需要一個YAML風格的對應檔,稱作“集合對應檔”。在準備階段,開發人員只需建立該檔案即可。MoSQL會自動建立PostgreSQL中必要的目標表。
MoSQL可以運行在one-time或是tailing模式下。在one-time模式下(通過“skip-tail”標誌開啟),它只會執行一次匯入。在tailing模式下,它會監控上述的oplog,這樣就能與PostgreSQL保持同步了。當啟動MoSQL時,你還可以強制匯入,該操作會刪除當前表並建立新表。
如果MoSQL在MongoDB資料庫中遇到了不符合模式的值(比如說在INTEGER欄位上使用了浮點數值),那麼它會發出警告,忽略整個對象,然後繼續。
如果遇到MongoDB對象中的欄位不在集合映射中,那麼它會丟棄額外的欄位,除非在:meta hash中設定了:extra_props。如果設定了,那麼它會收集所有丟棄的欄位,將其以JSON編碼到hash中,然後在_extra_props中儲存產生的文本。你可以使用該JSON做些處理。一種方式是使用plv8在PostgreSQL中解析他們,還可以將JSON拿出來並在應用代碼中進行解析。
MoSQL也基於MIT許可。
查看英文原文:MoSQL: Synchronizing MongoDB and PostgreSQL Made Easy
查看中文原文:MoSQL:簡化MongoDB與PostgreSQL之間的同步