題:
大量指標(鍵,值,時間戳)的數據庫
aep
2015-03-28 22:13:37 UTC
view on stackexchange narkive permalink

我正在尋找用於大量指標的數據庫,但我感到困惑的是,沒有任何東西可以用來

  • 在其中存儲大量(terrabyte)的指標數據形式:
    • 鍵(字符串)
    • 值(整數)
    • 日期時間(時間戳)
  • 來自從高度不可靠的來源(TCP錯誤)
  • 以1Gb / s的此類指標流
    • 執行數據子集(〜10Gb)的聚合:
      • avg(值),max(值),min(值),計數(*)
      • 其中value ==“ foo”
      • 其中X <日期時間當子集為“當前”時,< Y
      • 按日期時間/時間跨度
    • 分組
      • 能夠使子集“當前”,即加載到ram
      • 未標記為“ hot”的舊數據上的查詢,沒有時間限制

    到目前為止,我評估過:

    postgres

    • +從未丟失過數據
    • -很難規模
    • -特定績效沒有績效獎勵要求
    • -我不了解如何將數據劃分為“當前”和“舊”

    crate.io

    • -太年輕,在擴展時出現許多錯誤
    • +大分區語義允許基於時間戳進行分區
    • -http。 1Gb流的大量開銷

    influxdb

    • +語義正是我所需要的
    • -根本無法擴展
    • 經常崩潰並且丟失數據

    opentsdb

    • +看起來它是為我的用例設計的
    • -hbase的複雜性不值得

    cassandra

    • +擴展良好,與hbase不同,我了解它的工作原理
    • + twitter將其用於度量標準(rainbird)
    • -聚合應該在頂部完成hadoop
    • -hadoop很難

    石墨

    • +用於度量目的的自定義數據庫
    • -自定義數據庫...
    • -似乎很慢,我不知道它應該如何縮放

    prometheus.io

    • +看起來它是為我的用例設計的
    • -但事實並非如此。取而代之的是某種形式的“統計”統計。不能很好地擴展到不可靠的事件流。
  • [Teradata](http://www.teradata.com/?LangType=1033)是一個“大數據” DBMS,但我不知道它們在數據獲取(輸入流)中的位置
    這是高度可變的數據,還是像工廠過程數據那樣,下一個“值”很可能與上一個“值”相同?像PI(工廠信息)數據系統那樣進行差異記錄記錄會有所幫助嗎?
    我與開發Axibase時間序列數據庫的團隊在一起。它確實使用HBase進行原始存儲,並且您對HBase管理開銷的評論在某種程度上是有效的。我們試圖通過開發IO和吞吐量自動調整測試來解決此問題,以至少最小化配置中的猜測。如果您有興趣,請嘗試一下ATSD:http://axibase.com/products/axibase-time-series-database/
    在HBase調整上。例如,這是如何調整批處理大小/線程數以針對給定的工作負載對其進行優化:http://i.imgur.com/g7WqNFG.png。這是一個自動測試。深色大文本表示快速且可靠(低stdev)吞吐量。小灰色-緩慢且不一致。然後,您可以應用這些提示來設置適當的配置參數。 HBase可能很有趣。順便說一下,每秒插入400K。
    看一下[Druid](http://druid.io/)。一些最大的站點(Airbnb,Ebay,Cisco,阿里巴巴等)僅將其用於此用例。
    二 答案:
    Alex I
    2016-05-31 17:37:52 UTC
    view on stackexchange narkive permalink

    完全同意石墨,焊劑,opentsdb。在那裡,遇到了同樣的問題。

    最好的答案可能是AWS Redshift或Cassandra。

    Redshift:Postgres,但具有列式數據存儲。對於典型的時間序列,速度要快數千倍...

    Cassandra:您有優缺點。不過,與Spark搭配使用可能會更好。

    在將數據放入數據存儲之前,必須先進行暫存。例如,Redshift可以輕鬆處理您擁有的數據速度,但每秒插入的次數非常少,因此,不必在插入每個數據點時就對其進行插入。您只需記錄每秒鐘/分鐘/小時(也許是分割的)按鍵),然後將日誌放入S3,然後將其批量插入。您可能還需要長期保留日誌以提高可靠性。

    您說TCP不好。這意味著您可能不希望使用MQTT,但可以使用CoAP。查看AWS Kinetis所使用的內容,我對該協議不熟悉。我認為您可能可以設置ut,以將Kinetis數據直接流式傳輸到Redshift。

    P.S。我的解決方案是在本地緩存並定期寫入S3。由於對象的名稱描述了什麼,什麼時候(鍵和時間範圍),因此可以直接從S3運行許多分析。聚合只是將S3讀入熊貓,使用超方便的熊貓函數進行聚合,並記錄結果。整個過程都將移到Redshift中,但是到目前為止看起來非常快。

    Pierre.Sassoulas
    2016-07-22 14:47:16 UTC
    view on stackexchange narkive permalink

    首先,您要查找的關鍵字是“ 時間序列數據庫”。以下是根據 DB引擎排名的TSDB截至2016年7月的普及情況的快照:第二,

    snapshot of the popularity of TSDB as of july 2016

    你不能吃你的蛋糕。如果influxDB簡單但不能擴展,那是因為它不能在群集上運行;如果openTSDB可擴展,那是因為它們可以在群集上運行。但是,當然,建立集群環境非常困難!因此,您將不得不在擴展( openTSDB )和簡單性( influxDB )之間進行選擇,或者您可能需要為解決複雜性( kdb + 似乎就是那個目的。)

    或者,您可以查看使用docker進行安裝的 Warp10 druid 只需要Zookeeper,而不需要完整的hadoop堆棧,也不需要具有自己的安裝腳本(Synthesize)的 Graphite 。它們很容易安裝,同時仍然可以擴展。



    該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
    Loading...