MemSQL可以为时间序列应用做些什么
版權聲明:本文由騰訊云數據庫產品團隊整理,頁面原始內容來自于db weekly英文官網,若轉載請注明出處。翻譯目的在于傳遞更多全球最新數據庫領域相關信息,并不意味著騰訊云數據庫產品團隊贊同其觀點或證實其內容的真實性。如果其他媒體、網站或其他任何形式的法律實體和個人使用,必須經過著作權人合法書面授權并自負全部法律責任。不得擅自使用騰訊云數據庫團隊的名義進行轉載,或盜用騰訊云數據庫團隊名義發布信息。
在MemSQL使用中,我們發現人們對時序數據庫的場景非常感興趣。當遇到以下情況時尤其如此:(1)高效率的事務獲取,(2)低延遲查詢和(3)高并發查詢率。
?
在下文中,我將展示如何使用MemSQL用作一個強大的時序數據庫,并通過簡單的查詢和用戶定義的函數來說明這一點,這些函數將展示如何進行時間序列 - 頻率轉換,平滑等操作。
?
我還將介紹如何快速加載時序數據點,并且沒有規模限制。
?
用SQL操作時間序列與大多數時序數據庫不同,MemSQL支持標準SQL,包括內部和外部聯接,子查詢,通用表表達式(CTE),視圖,用于日期和時間操作的豐富標量函數,分組,聚合和窗口函數。我們支持所有常見的SQL數據類型,包括具有微秒精度的datetime(6)類型,該類型非常適合作為時間序列的時間戳。
?
在金融交易系統中,一種常見的時間序列分析方法是操縱股票價格。下面是一個使用標準SQL進行這種計算的簡單示例。我們使用一個包含多個股票時間序列的表格,并為每個股票生成高,低,開盤和收盤:
此查詢使用標準SQL?窗口函數為表中的每個符號生成高,低,打開和關閉值,假設“ticks”包含最近交易日的數據。
類似的查詢可用于創建“燭臺圖表”,這是一種流行的金融時間序列報表樣式,如下圖所示,可顯示連續時間間隔內證券的開盤價,最高價,最低價和收盤價:
例如,該查詢生成一個表,該表可以在三分鐘的時間間隔內直接轉換為燭臺圖表:
Results:
結果:
?
平滑是時間序列管理的另一個常見需求。這個查詢為股票“ABC”生成一個平滑的價格序列,平均最后三個記錄的價格:
?
Results:
結果:
?
MemSQL支持用戶定義的標量函數(UDF),聚合函數和存儲過程(MPSQL語言)的可擴展性。MemSQL將UDF和存儲過程編譯為機器代碼,以獲得高性能。實際上,我使用了可擴展性來創建上一節中用作UDF?的time_bucket()函數(如下面的附錄所示);?這為其他特定時間序列產品中的類似功能提供了相同的功能。您可以很容易地創建一個函數或表達式來按時間間隔存儲,例如秒、分鐘、小時或天。時間序列數據的一個常見需求是執行插值。
?
例如,假設有一個時間序列,其中隨機間隔的點平均間隔為30秒。可能有幾分鐘沒有數據點。因此,如果您將原始(不規則)時間序列數據轉換為具有一分鐘點的常規時間序列,則可能存在間隙。如果要為沒有間隙的繪圖提供輸出,則需要從間隙前后的值中插入間隙的值。在MemSQL中實現存儲過程非常簡單,方法是獲取一個查詢結果,并輸出一個行集,其中的空格插入到一個臨時表中。
?
然后可以使用ECHO命令將其發送回客戶端應用程序。此外,MemSQL支持用戶定義的聚合函數,這些函數可用于實現有用的時間序列操作,例如獲取序列中第一個和最后一個值的簡寫,而無需特定的窗口函數。根據一個名為FIRST()的用戶定義的聚合函數(UDAF),考慮此查詢以在每三分鐘的交易中獲得股票ABC的第一個值:
?
Results:
結果:
?
FIRST()和類似的LAST() UDAF的實現在下面的補充材料部分中給出。
?
時間序列壓縮和生命周期管理MemSQL擅長處理時間序列事件的突發插入流量和節省空間很重要的歷史時間序列信息。對于突發插入流量,您可以使用MemSQL行存儲表來保存時間序列事件。對于較大和較長生命周期的時間序列事件集或已經老化的較老的時間序列數據集(因此不再更新它們),MemSQLcolumnstore是一種很好的格式,因為它可以非常有效地壓縮時間序列數據。此外,它保存在磁盤上,因此主內存大小不限制您可以存儲的數據量。
?
可擴展的時間序列攝取構建時間序列應用程序時,數據可以有許多來源,包括應用程序,文件系統,S3,HDFS,Azure Blob商店和Kafka隊列。MemSQL可以從所有這些來源快速地獲取數據。MemSQL Pipelines專門用于快速輕松地從這些源加載數據流,無需過程編碼即可在MemSQL中建立快速的事件流。MemSQL可以以驚人的數據速率提取數據。在最近的一次測試中,我使用了一個雙節點MemSQL集群,每個節點在Intel Xeon Platinum 28核系統上運行,每秒直接從應用程序插入2,850,500個事件,具有完整的事務完整性和持久性??梢允褂弥苯蛹虞d或Kafka管道獲得更好的速率。如果你必須擴展更高,只需添加更多節點 - 沒有實際限制。
?
當通用MemSQL適合時間序列時我們已經看到,時間序列數據管理市場已經分化為時間序列專用產品,使用它們自己的專用語言;以及可以與使用SQL的標準報告和業務智能工具互操作的擴展SQL系統。MemSQL屬于第二類。MemSQL適用于需要快速查詢,低延遲查詢和高并發性的時間序列應用程序,沒有擴展限制,并且受益于SQL語言功能和SQL工具連接。
?
許多特定于時間序列的產品在數據管理方面都有缺陷。有些應用程序缺乏擴展功能,限制了它們可以處理的問題的大小,或者迫使應用程序開發人員在代碼中構建復雜的分片邏輯,以便在多個實例之間分割數據,這將耗費寶貴的人力資源,而這些人力資源可以更好地投入到應用程序業務邏輯中。其他系統的解釋查詢處理器無法跟上我們這樣的最新查詢執行實現。有些缺少SQL數據庫常見的事務處理完整性功能。MemSQL讓時間序列應用程序開發人員充滿信心地前進,他們知道自己不會遇到規模瓶頸,并且可以使用所有熟悉的工具——任何可以連接到SQL數據庫的工具。
?
總結MemSQL是一個用于管理時間序列數據的強大平臺。它支持快速方便地加載事件流的能力,并且可以無限擴展。它支持完整的SQL,可以使用SQL 92的所有標準功能,以及添加的窗口函數擴展來實現復雜的查詢。它支持許多開發人員對各種應用程序(包括時間序列)所需的事務,高速并發更新和查詢以及高可用性技術。而且,您最喜歡的SQL兼容工具可以連接到MemSQL,這使得MemSQL成為時間序列的強大平臺。
?
活動推薦:騰訊TEG與CCF(中國計算機協會)合辦的騰訊技術工程沙龍“走進工業互聯網”將在4月14日(周日)舉辦啦!掃碼即可報名~
本文轉自公眾號【騰訊數據庫TencentDB】,掃描以下二維碼可以關注。
總結
以上是生活随笔為你收集整理的MemSQL可以为时间序列应用做些什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国第五届CSS大会分享:CSS TIM
- 下一篇: 云调用,小程序鉴权正确姿势