2015-09-09 78 views
1

我們目前正在使用MySQL記錄多個網站的印象數據,並且正在尋求更合適的替代方法來記錄我們網站現在看到的大量流量。我們最終在MySQL數據庫中需要的是彙總的數據。記錄大量的印象數據(每月5000萬條記錄)

「高容量」我的意思是說,我們每個月對這個印象數據記錄約5000萬條記錄。值得注意的是,這個表格活動幾乎完全是寫入並且只能很少閱讀。 (與SO:Which NoSQL database for extremely high volumes of data上的這個用例不同)。我們通過按範圍對數據進行分區並執行批量插入來解決一些MySQL性能問題,但總的來說,我們不應該使用MySQL。

我們最終在MySQL數據庫中需要的是彙總的數據,我相信還有其他技術更適合這種用例的高容量日誌記錄部分。我已閱讀有關mongodbHBase(與map reduce),CassandraApache Flume,我覺得我在正確的軌道上,但需要一些指導我應該看什麼技術(或組合)。

我想特別瞭解的是哪些平臺最適合大批量日誌記錄,以及如何獲得每天輸入到MySQL中的彙總/減少數據集。

回答

1

Hive不存儲信息,它只允許你用類似sql語言(HQL)查詢「原始」數據。

如果您的彙總數據足夠小,可以存儲在MySQL中,並且這是您數據的唯一用途,那麼HBase對您來說可能太多了。

我的建議是隻使用Hadoop(HDFS和MapReduce

  1. 的印象事件創建日誌文件(文本文件)。
  2. 然後將它們移動到HDFS(另一種可能是使用卡夫卡或風暴,如果你需要近實時的解決方案)。
  3. 能夠創建一個MapReduce工作來閱讀和收集您的日誌,並在降低輸出使用DBOutputFormat的彙總數據存儲到MySQL。
+0

是的,彙總的數據每天會減少到大約100條記錄,這在MySQL中非常易於管理。你能否詳述一下#1?我們在應用程序中使用PHP,如果我正確理解#1,我們只需將印象事件寫入文件系統。一個cron作業可以定期運行,將這些數據轉移到HDFS中。如果我們在#2中選擇了替代方案,我們是否會直接將數據從我們的應用程序饋入卡夫卡或風暴,從而消除#1?感謝您的反饋。 –

+1

爲了利用hadoop功能,您必須使用HDFS文件系統作爲存儲(採用分佈式處理的分佈式文件系統)。有將數據放入HDFS的不同方法。對於非實時解決方案,最常見的情況是在Web應用程序或bckend(您的php應用程序)中本地生成日誌文件,然後將它們移動到hdfs中。 Distcp是複製HDFS內外數據的好工具,使用它非常簡單。 – RojoSam

+1

Kafka和storm在運行時會接收源應用程序生成的事件,並且每個時間量或事件都會在hdfs文件系統內生成一個文件(在我們的例子中)。在這種情況下,instad將日誌寫入文件系統,您將需要將事件發送到隊列(kafka)。沒有辦法避免將事件寫入文件並將它們發送到某個位置,不同之處在於架構的複雜性(可能是步驟的順序)。最簡單的解決方案是在本地寫入日誌,然後使用Distcp將文件發送到HDFS。 – RojoSam

0

一種方法可能是簡單地將原始印象記錄轉儲到平面文件中。將有一個每日批處理將使用MapReduce程序處理這些文件。 MapReduce聚合輸出可以存儲到Hive或HBase中。

請讓我知道,如果你看到這種方法有任何問題。 Bigdata技術堆棧有許多基於數據類型和需要彙總的方式。

+0

日巴tch是我想到的,在數據​​集上使用MapReduce(或類似技術)將*提供給* MySQL。但是,我們希望解決的核心問題是不使用MySQL進行大容量印象記錄。這是另一個存儲選項發揮作用的地方,例如Hive或HBase。我想要將彙總的數據存儲在MySQL中,儘管它可能與原始日誌數據駐留在同一個數據存儲中。您會推薦Hive還是HBase進行原始印象記錄? –

+0

對於原始印象記錄,它取決於數據是否是結構化的,並且可以用表格格式表示。在這種情況下你可以使用Hie。 – gyan