我在廣告技術領域工作,我們當前的基礎架構使用MySQL來存儲點擊和轉換日誌。到目前爲止,MySQL對我們運行鍼對點擊數據的即席查詢非常有用。 我們正考慮切換到卡桑德拉,因爲我們在高峯時段收到巨大的交通高峯。不僅如此,我們正以非常快的速度增長,並且我們每時每刻都會獲得約500-1000次點擊(持續時間有時會持續20-30分鐘)。 我一直都是可用的選項,到目前爲止,我的研究讓我相信,在寫入性能方面沒有什麼比Cassandra更出色。 我目前正在創建一個數據模型來存儲點擊的過程。 任何點擊的主要成分如下:Cassandra用於存儲點擊日誌
- 廣告系列ID
- 酒吧ID
- 時間戳
- 創意ID
- 事件代碼(無論它是一個有效的點擊或無效點擊。例如,event_code = 0是一個有效的點擊)
現在,我需要支持以下查詢:
1. SELECT * FROM clicks WHERE campaign_id=?
2. SELECT * FROM clicks WHERE campaign_id=? AND date_time>=? AND date_time <=?
3. SELECT * FROM clicks WHERE campaign_id=? AND pub_id=? AND AND date_time>=? AND date_time <=? AND event_code=?
等 這是很簡單的與MySQL做的,在這之後,我會在一個CSV文件,從這些查詢的所有數據。 不過,如果我是基於第一查詢我的表模型,這將意味着我需要在卡桑德拉創建一個表如下所示:
CREATE TABLE clicks_by_campaign(
camp_id int,
pub_id int,
date_time timestamp,
creative_id int,
event_code int,
//other fields like ip, user agent ,device etc,
PRIMARY KEY(camp_id,pub_id,date_time,event_code,creative_id))
但也有活動,可以有幾百萬行。例如,我們的廣告系列使用特定ID,例如id = 3,其點擊次數超過700萬次。 這不會造成寬行問題嗎?據我所知,所有這些活動數據將作爲一個分區存儲在一臺物理機器上。我的想法是正確的還是我錯過了什麼?請注意,其他查詢也必須得到支持。例如,我可能必須共享特定發佈商的點擊日誌(不管廣告系列ID如何)。在這種情況下,查詢將如下所示:
SELECT * FROM clicks_by_publisher WHERE pub_id=?
顯然,這將意味着我將不得不被命名爲「clicks_by_publisher」等創建另一個表
我也想指出,我將使用Apache Flink,它可以在1分鐘的時間窗口內分析,彙總和分組點擊信息。這些結果將進一步存儲到MySQL中,以儘可能多地支持臨時查詢。
無論如何,如果有人指出我正確的方向,我將不勝感激。 有沒有其他策略可以使用?我錯過了什麼嗎? 謝謝:)
感謝您的回覆。你能詳細說明'token'是什麼意思嗎?此外,在我看來,你建議通過時間戳分區活動數據(所以如果我們得到5次點擊1個時間戳,這將構成一個5行分區)。這實際上是實現它的最好方式,但我無法想象如果我想在特定日期獲取某個廣告系列的點擊詳情,請運行60 * 60 * 24查詢。 – Ankush92
@ Ankush92添加了更多的細節來回答。 – Gunwant
感謝您的解釋。我會更多地考慮這一點。真的很感激它! – Ankush92