Mysql

用於建構實時分析系統的數據庫

  • February 24, 2012

我想搭建一個類似Google分析的系統(僅供內部使用,流量少,功能少),主要專注於

  1. 通過使用者人口統計資訊的不同維度(例如使用者代理、作業系統、國家/地區等)實時統計唯一 URI 訪問/PV
  2. 實時計算平均使用者會話時長(如果來自同一 IP 的兩次請求之間的差異小於 1 分鐘)

有沒有什麼好的數據庫儲存可以實時進行這種查詢?

ps 我目前正在測試 InfiDB。

無論平台如何,建構快速實時分析都有一個技巧。我已經使用 Microsoft Analysis Services 完成了這項工作,但您也可以在其他平台上使用類似的技術。

訣竅是擁有一個可以填充近實時數據的領先分區和一個針對快速查詢進行優化的歷史分區(或多個分區)。如果您保持前導分區足夠小,那麼查詢也將很快。

為了管理這一點,您的ETL處理填充了前導分區,並且您建構了一個補充過程,該過程定期將分區轉換為快速查詢優化格式。此過程的確切性質因您的平台而異。

在 MS Analysis Services 上,前導分區是作為直接從表中讀取的ROLAP分區完成的。尾隨分區通過聚合轉換為MOLAP。其他OLAP系統也可以類似地工作。在 Oracle 上,您可以在尾隨分區上創建點陣圖索引和物化視圖分區以加快查詢速度。其他一些系統也有這種類型的特性,雖然我不知道 MySQL 支持它。

猜測一下,我會說最便宜的主流平台是 MS Analysis Services,它只能與 SQL Server 捆綁使用,不能單獨購買。對於使用 2008 R2 進行分區,您將需要 SQL Server 企業版,在英國,每個 CPU 插槽的價格約為 22,000 英鎊,而在池塘的另一邊則要少一些。Microsoft 將在 2012 年發布新的“商業智能”版本的 SQL Server。一旦達到 RTM,該產品的 BI 版本確實支持分區多維數據集,並且比企業版便宜得多。根據您的預算和時間限制,您可以改用它。

您必須解決的問題的另一個方面是更改數據擷取 - 有效地辨識新的或更改的數據行並將其推送到ETL流程中。大多數 DBMS 供應商的 CDC 功能僅適用於他們自己的數據庫,因此如果您想要 CDC 解決方案,您可能必須使用第三方應用程序或源觸發器。

  • 各種第三方推出了將跨數據庫平台遷移的CDC應用程序。可以在有關該主題的維基百科條目中看到 CDC 產品列表。 請注意,您可能仍然遇到集成問題。例如,IBM Infosphere CDC 只能按行而不是按批次觸發外部流程,這可能會導致大數據量的效率問題。
  • 您可以在源表上創建一組觸發器,將更改推送到暫存區域。這需要您對源數據庫有足夠的訪問權限才能執行此操作,因此它可能不是供應商支持的數據庫的選項。
  • 如果數據來自文件(例如 Web 伺服器日誌),則您必須編寫一個客戶端程序來監視文件尾部是否有新記錄。

您很可能最終不得不實施一個輪詢數據源的拉取過程。在這種情況下,您必須計算出可容忍的延遲並編寫您的流程,以便它在檢測更改方面足夠有效,以便它可以足夠快地執行。有句老話,有時出現在嵌入式系統圈子裡,大意是:“當他們開始輪詢時,你知道他們會認真對待可靠性

可以在 PostgreSQL 中建構符合您的基本要求的東西。您可以建構與觸發器保持同步的物化視圖,並使用分區來減少維護舊數據的成本。但這在該數據庫中仍然是一個非常手動的過程,因此您需要為多個組件自定義編碼。與針對此特定目的優化的商業解決方案相比,結果的性能不會很好。

針對這一市場的 PostgreSQL 商業分支提供了該領域的一些分析創新,例如來自GreenplumTruviso的那些。完全免費的 PostgreSQL 還不是大規模解決此類問題的好方法。

引用自:https://dba.stackexchange.com/questions/13678