日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MemSQL可以為時間序列應(yīng)用做些什么

 BIGDATA云 2019-04-10

在MemSQL使用中,我們發(fā)現(xiàn)人們對時序數(shù)據(jù)庫的場景非常感興趣。當(dāng)遇到以下情況時尤其如此:(1)高效率的事務(wù)獲取,(2)低延遲查詢和(3)高并發(fā)查詢率。

在下文中,我將展示如何使用MemSQL用作一個強大的時序數(shù)據(jù)庫,并通過簡單的查詢和用戶定義的函數(shù)來說明這一點,這些函數(shù)將展示如何進行時間序列 - 頻率轉(zhuǎn)換,平滑等操作。

我還將介紹如何快速加載時序數(shù)據(jù)點,并且沒有規(guī)模限制。

用SQL操作時間序列

與大多數(shù)時序數(shù)據(jù)庫不同,MemSQL支持標準SQL,包括內(nèi)部和外部聯(lián)接,子查詢,通用表表達式(CTE),視圖,用于日期和時間操作的豐富標量函數(shù),分組,聚合和窗口函數(shù)。我們支持所有常見的SQL數(shù)據(jù)類型,包括具有微秒精度的datetime(6)類型,該類型非常適合作為時間序列的時間戳。

在金融交易系統(tǒng)中,一種常見的時間序列分析方法是操縱股票價格。下面是一個使用標準SQL進行這種計算的簡單示例。我們使用一個包含多個股票時間序列的表格,并為每個股票生成高,低,開盤和收盤:


參考粘貼用例:

CREATE TABLE tick(ts datetime(6), symbol varchar(5),

  price numberic(18,4));

INSERT INTO tick VALUES

('2019-02-18 10:55:36.179760', 'ABC', 100.00),

('2019-02-18 10:55:26.179760', 'ABC', 100.00),

('2019-02-18 10:55:16.179760', 'ABC', 100.00),

('2019-02-18 10:55:06.179760', 'ABC', 100.00),

('2019-02-18 10:55:06.179760', 'ABC', 100.00),

('2019-02-18 10:55:06.179760', 'YJM', 100.00),

('2019-02-18 10:55:01.179760', 'XYZ', 100.00);

此查詢使用標準SQL 窗口函數(shù)為表中的每個符號生成高,低,打開和關(guān)閉值,假設(shè)“ticks”包含最近交易日的數(shù)據(jù)。

參考粘貼用例:

WITH ranked AS

(SELECT symbol,

RANK() OVER w as r,

MIN(price) OVER w as min_pr,

MAX(price) OVER w as max_pr,

FIRST_VALUE(price) OVER w as first,

LAST_VALUE(price) OVER w as last

FROM tick

    WINDOW w AS (PARTITION BY symbol


    ORDER BY ts

        ROWS BETWEEN UNBOUNDED PREDING

        AND UNBOUNDED FOLLOWING))

SELECT symbol, min_pr, max_por, first, last

FROM ranked

WHERE r = 1;

類似的查詢可用于創(chuàng)建“燭臺圖表”,這是一種流行的金融時間序列報表樣式,如下圖所示,可顯示連續(xù)時間間隔內(nèi)證券的開盤價,最高價,最低價和收盤價:

例如,該查詢生成一個表,該表可以在三分鐘的時間間隔內(nèi)直接轉(zhuǎn)換為燭臺圖表:


Results:

結(jié)果:

平滑是時間序列管理的另一個常見需求。這個查詢?yōu)楣善薄癆BC”生成一個平滑的價格序列,平均最后三個記錄的價格:

Results:

結(jié)果:


使用可擴展性來增加MemSQL的時間序列功能

MemSQL支持用戶定義的標量函數(shù)(UDF),聚合函數(shù)和存儲過程(MPSQL語言)的可擴展性。MemSQL將UDF和存儲過程編譯為機器代碼,以獲得高性能。實際上,我使用了可擴展性來創(chuàng)建上一節(jié)中用作UDF 的time_bucket()函數(shù)(如下面的附錄所示); 這為其他特定時間序列產(chǎn)品中的類似功能提供了相同的功能。您可以很容易地創(chuàng)建一個函數(shù)或表達式來按時間間隔存儲,例如秒、分鐘、小時或天。時間序列數(shù)據(jù)的一個常見需求是執(zhí)行插值。

例如,假設(shè)有一個時間序列,其中隨機間隔的點平均間隔為30秒??赡苡袔追昼姏]有數(shù)據(jù)點。因此,如果您將原始(不規(guī)則)時間序列數(shù)據(jù)轉(zhuǎn)換為具有一分鐘點的常規(guī)時間序列,則可能存在間隙。如果要為沒有間隙的繪圖提供輸出,則需要從間隙前后的值中插入間隙的值。在MemSQL中實現(xiàn)存儲過程非常簡單,方法是獲取一個查詢結(jié)果,并輸出一個行集,其中的空格插入到一個臨時表中。

然后可以使用ECHO命令將其發(fā)送回客戶端應(yīng)用程序。此外,MemSQL支持用戶定義的聚合函數(shù),這些函數(shù)可用于實現(xiàn)有用的時間序列操作,例如獲取序列中第一個和最后一個值的簡寫,而無需特定的窗口函數(shù)。根據(jù)一個名為FIRST()的用戶定義的聚合函數(shù)(UDAF),考慮此查詢以在每三分鐘的交易中獲得股票ABC的第一個值:

參考粘貼用例:

SELECT time_bucket('3 minte', ts), first(price, ts)

FROM tick WHERE symbol = "ABC"

GROUP BY 1

ORDER BY 1;


FIRST()和類似的LAST() UDAF的實現(xiàn)在下面的補充材料部分中給出。

時間序列壓縮和生命周期管理

MemSQL擅長處理時間序列事件的突發(fā)插入流量和節(jié)省空間很重要的歷史時間序列信息。對于突發(fā)插入流量,您可以使用MemSQL行存儲表來保存時間序列事件。對于較大和較長生命周期的時間序列事件集或已經(jīng)老化的較老的時間序列數(shù)據(jù)集(因此不再更新它們),MemSQLcolumnstore是一種很好的格式,因為它可以非常有效地壓縮時間序列數(shù)據(jù)。此外,它保存在磁盤上,因此主內(nèi)存大小不限制您可以存儲的數(shù)據(jù)量。

可擴展的時間序列攝取

構(gòu)建時間序列應(yīng)用程序時,數(shù)據(jù)可以有許多來源,包括應(yīng)用程序,文件系統(tǒng),S3,HDFS,Azure Blob商店和Kafka隊列。MemSQL可以從所有這些來源快速地獲取數(shù)據(jù)。MemSQL Pipelines專門用于快速輕松地從這些源加載數(shù)據(jù)流,無需過程編碼即可在MemSQL中建立快速的事件流。MemSQL可以以驚人的數(shù)據(jù)速率提取數(shù)據(jù)。在最近的一次測試中,我使用了一個雙節(jié)點MemSQL集群,每個節(jié)點在Intel Xeon Platinum 28核系統(tǒng)上運行,每秒直接從應(yīng)用程序插入2,850,500個事件,具有完整的事務(wù)完整性和持久性。可以使用直接加載或Kafka管道獲得更好的速率。如果你必須擴展更高,只需添加更多節(jié)點 - 沒有實際限制。

當(dāng)通用MemSQL適合時間序列時

我們已經(jīng)看到,時間序列數(shù)據(jù)管理市場已經(jīng)分化為時間序列專用產(chǎn)品,使用它們自己的專用語言;以及可以與使用SQL的標準報告和業(yè)務(wù)智能工具互操作的擴展SQL系統(tǒng)。MemSQL屬于第二類。MemSQL適用于需要快速查詢,低延遲查詢和高并發(fā)性的時間序列應(yīng)用程序,沒有擴展限制,并且受益于SQL語言功能和SQL工具連接。

許多特定于時間序列的產(chǎn)品在數(shù)據(jù)管理方面都有缺陷。有些應(yīng)用程序缺乏擴展功能,限制了它們可以處理的問題的大小,或者迫使應(yīng)用程序開發(fā)人員在代碼中構(gòu)建復(fù)雜的分片邏輯,以便在多個實例之間分割數(shù)據(jù),這將耗費寶貴的人力資源,而這些人力資源可以更好地投入到應(yīng)用程序業(yè)務(wù)邏輯中。其他系統(tǒng)的解釋查詢處理器無法跟上我們這樣的最新查詢執(zhí)行實現(xiàn)。有些缺少SQL數(shù)據(jù)庫常見的事務(wù)處理完整性功能。MemSQL讓時間序列應(yīng)用程序開發(fā)人員充滿信心地前進,他們知道自己不會遇到規(guī)模瓶頸,并且可以使用所有熟悉的工具——任何可以連接到SQL數(shù)據(jù)庫的工具。

總結(jié)

MemSQL是一個用于管理時間序列數(shù)據(jù)的強大平臺。它支持快速方便地加載事件流的能力,并且可以無限擴展。它支持完整的SQL,可以使用SQL 92的所有標準功能,以及添加的窗口函數(shù)擴展來實現(xiàn)復(fù)雜的查詢。它支持許多開發(fā)人員對各種應(yīng)用程序(包括時間序列)所需的事務(wù),高速并發(fā)更新和查詢以及高可用性技術(shù)。而且,您最喜歡的SQL兼容工具可以連接到MemSQL,這使得MemSQL成為時間序列的強大平臺。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多