2016-10-14 53 views
2

我有一個使用akka-persistence-jdbc插件和postgresql作爲後端的正在運行的項目。Akka持久性:從jdbc(postgres)遷移到cassandra

現在我想遷移到akka-persistence-cassandra。 但是,我怎樣才能將現有的事件(postgres中超過4GB大小)轉換爲cassandra?

我應該編寫一個手動遷移程序嗎?從postgres中讀取並在cassandra中寫入正確的格式?

回答

3

這是一個典型的遷移問題。有多種解決方案。

  1. Spark SQL and Spark Cassandra Connector:星火JDBC(稱爲星火據幀,星火SQL)API允許你從任何JDBC源讀取。你可以通過分段閱讀它,否則你將會失去內存。分割也使得遷移並行。然後通過Cassandra Spark連接器將數據寫入Cassandra。這是我在任務中使用的最簡單和有效的方式。

  2. Java Agents: Java Agent可以基於普通的JDBC或其他庫編寫,然後使用Datastax驅動程序寫入Cassandra。 Spark程序在多機器上運行 - 多線程方式,並在出現故障時自動恢復。但是,如果您手動編寫這樣的代理,那麼您的代理只能在單臺機器上運行,並且多線程也需要編碼。

  3. Kafka Connectors:卡夫卡是一個消息傳遞經紀人。它可以間接用於遷移。卡夫卡有可以讀寫不同數據庫的連接器。您可以使用JDBC連接器從PostGres和Cassandra連接器讀取以寫入Cassandra。這並不容易,但它具有「不涉及編碼」的優點。

  4. ETL Systems:一些ETL系統支持卡桑德拉,但我沒有親自嘗試過任何東西。

我看到在使用星火卡桑德拉和星火SQL遷移一些優勢,其中有些是:

  1. 代碼爲簡潔。這是幾乎沒有40線
  2. 多機(每臺機器上同樣多線程)
  3. 工作進展情況和統計​​星火主UI
  4. 容錯系統,如果火花節點關閉或線程/工人在那裏失敗了,然後工作是在其他節點上自動啓動 - 適用於很長時間的運行作業

如果您不知道Spark,那麼對於4GB數據,編寫代理程序是可以的。