Timestream模型是針對時序場景設計的特有模型,可以讓用戶快速完成業務代碼的開發,實現相關業務需求。但是,如果業務系統不僅想實現基礎的相關業務功能,還要達到最佳的性能,并且兼顧到未來的擴展性的話,就不是一件特別容易的事情。
本文會以共享汽車管理平臺為例,介紹一系列的timestream最佳設計和使用,給業務設計和使用提供一些參考。
在共享汽車管理平臺這個場景中,主要是對車輛的狀態軌跡監控、車倆元數據以及訂單元數據進行管理。另外,還會對相關的數據進行計算分析并存儲相關結果:
業務主要是對上面三部分數據進行查詢和檢索,滿足業務場景的需求。其中車輛元數據以及狀態軌跡數據是典型的時序序列,可以很方便的映射到Timestream模型中。
下圖是數據模型的映射:
下面介紹一下模型設計的細節以及設計中需要注意的一些優化點,這些優化點對于業務功能以及性能上都有一定的提升。
在Timestream模型中,主要包含了元數據和數據點兩部分數據,分別使用一個元數據表以及若干個數據表進行存儲。下面介紹這兩類數據在存儲設計的關鍵點。
元數據表設計
在共享汽車這個場景下,元數據表主要存儲兩類數據:車輛的基本信息、車輛的最近狀態數據(位置、續航、狀態、違章統計等),業務會根據各類信息進行多條件的組合查詢符合條件的車輛。
如上圖所示,Timestream的元數據表會通過多元索引來提供豐富的數據檢索能力。在Timestream模型的元數據中,包含了name、tags、attributes三類數據,其中name、tags默認會提供數據檢索能力,attributes則需要在創建Meta表的時候指定需要索引的attributes字段以及相關信息,默認attributes并不支持檢索。
需要注意的是,目前并不支持動態修改Meta表的索引字段,所以最好能在設計之初能夠考慮到當前以及未來的功能需求,下面介紹一下相關信息是如何映射到模型以及相關的設計。
name設計
name字段的選取是很關鍵的,是數據檢索性能的一個重要影響因素,不同的name字段設計可能會導致查詢延時相差一個數量級。name字段的選取建議滿足以下條件:
在共享汽車管理平臺這個場景下,管理的是各個平臺的車輛,而在車輛檢索的時候,一定會指定的條件是平臺的名字,并且某個平臺的車輛其實也不會太多,一般也就百萬量級,所以這里可以將平臺作為name。
tags設計
在Timestream模型中,Name和Tags可以唯一確定某個元數據,在這個場景中,唯一確定某輛車的信息是:平臺、車輛ID,其中平臺是name,所以,tags中只需要存儲ID即可。
tags設計需要注意:
attributes設計
attributes是主體的可變屬性,也可以用來存儲主體的非唯一屬性。在這個場景中,車輛的基本信息以及當前狀態都是用attributes來進行存儲。attributes設計關鍵點:
索引創建示例代碼:
public void createMetaTable() { db.createMetaTable(Arrays.asList( new AttributeIndexSchema("地區", AttributeIndexSchema.Type.KEYWORD), ... // 數值類型索引 new AttributeIndexSchema("座位", AttributeIndexSchema.Type.LONG), ... // 擴展字段,數組類型索引 new AttributeIndexSchema("配置1", AttributeIndexSchema.Type.KEYWORD).isArray() ));
數據表設計
Timestream可以支持多個數據表的存儲,來滿足不同的業務場景需求。另外,為了能夠利用底層引擎所做的性能優化,我們推薦append的寫入方式,即不會對已有數據進行修改,所以在以下場景中,我們建議業務將數據分到不同數據表中進行存儲:
在共享汽車這個場景中,需要對車輛的狀態軌跡數據進行流式處理,比如檢測是否超速等違章、車輛狀態軌跡是否異常等,然后將處理之后的數據寫到另外一張表中,提供給業務進行查詢。
前面介紹了業務模型設計需要注意的地方,對業務功能拓展能力以及性能都有一定的提升。下面介紹一下timestream sdk使用的一些性能優化點。
數據寫入
元數據
元數據寫入支持兩種方式:put和update。其中put會刪除老的記錄,并且插入一個全新行;update則是對原有記錄的部分attributes進行更新。建議盡量使用Put的方式進行寫入。
示例代碼:
public void writeMeta() { TimestreamIdentifier identifier = new TimestreamIdentifier.Builder("*滴") .addTag("ID", carNo) .build(); TimestreamMeta meta = new TimestreamMeta(identifier) .addAttribute("地區", "杭州") .addAttribute("座位", 4) ... .addAttribute("狀態", "閑置"); // 插入車輛信息 metaWriter.put(meta); }
數據點
數據點寫入也提供了兩種方式:同步和異步。其中異步接口底層是通過TableStoreWriter進行異步寫入,其寫入吞吐能力更高,對寫入延時不是特別敏感的業務建議使用異步方式。
示例代碼:
public void writeData() { TimestreamIdentifier identifier = new TimestreamIdentifier.Builder("*滴") .addTag("ID", carNo) .build(); Point point = new Point.Builder(1546272000, TimeUnit.SECONDS) .addField("位置", "30.1457580736,120.0563192368") .addField("車速", 30) .addField("續航", 100) .build(); // 異步寫入 dataWriter.asyncWrite(identifier, point); }
數據查詢
元數據查詢
元數據查詢的時候,建議指定需要返回的列名。如果沒有顯示指定列名的話,會去讀主表以獲取完整的信息,這樣每一行元數據都會反查一次主表,查詢性能會更差一些。
示例代碼:
Filter filter = Name.equal("*滴"); // 用selectAttributes指定需要返回的attributes Iterator<TimestreamMeta> iter = metaTable.filter(filter) .selectAttributes("座位", "狀態") .fetchAll();
本文介紹了Tablestore Timestream在模型設計以及sdk使用中的一些優化點,對于業務現有功能實現、未來拓展以及性能提升都有很好的作用。
作者:lyan094
為主播和內容創作者提供非凡硬件、軟件和工作室生態的知名公司Elgato于2021年6月8日發布了Stream Deck 5.0這一重大應用更新,其中最重要的包括Stream Deck 商店這一全新的功能。它是一個囊括了插件、圖標包、免版權音樂和音效、使用教學視頻和內容創作技巧的平臺。Stream Deck用戶即日起可免費更新到5.0版本。
Stream Deck 5.0
Elgato Stream Deck是一款可全方位自定義的LCD按鍵直播控臺,一直以來廣受歡迎。通過它,內容創作者通過按鍵即可輕松地控制手中的各種應用和工具。現在,除了提升整個Stream Deck的體驗,Stream Deck 商店還為創作者提供了豐富的電子創作素材,讓他們可以利用這些素材來豐富自己的內容,并最終為自己的直播帶來更高的價值。
Stream Deck 商店包括以下五個板塊:發現、插件、圖標、音樂和音效。
發現:了解Stream Deck的新功能
Stream Deck不斷帶來更創新的功能,創作者也不斷研究出使用Stream Deck的新方法。在“發現”板塊,創作者可以隨時了解最新的插件及軟件更新,還可以觀看教程和采訪,并找到靈感來探索Stream Deck的更多用途。
插件:與Stream Deck集成的應用和工具
從直播、編輯到設計、開發、社交和工作室自動化,Stream Deck插件可以使幾乎所有基于計算機的工作流程更加流暢和直觀。創作者目前可以使用超過100個插件。通過Stream Deck 商店的“插件”板塊,便可以輕松瀏覽和安裝這些插件。Elgato與合作伙伴會定期添加新插件,而獨立開發者也能通過免費開放的Stream Deck SDK創建插件,并將其添加到商店。
圖標:為Stream Deck按鍵帶來亮眼的設計
創作者可以借助按鍵圖標來輕松地識別操作,并通過可視化的方式來確定命令已經執行。圖標功能可以讓Stream Deck的外觀更具個性化,現在,創作者可以輕松下載大量精美的圖標包,安裝即可使用,這些圖標包由Visuals By Impulse等圖形設計專業團隊制作。當然,Stream Deck用戶也可以一如既往地“客制化”出獨一無二的Stream Deck圖標。
音樂:數以千計的免版權音樂
Stream Deck用戶可以在直播過程中輕松地播放高品質的音樂,從嘻哈和舞曲,到輕松的樂曲和樂器演奏,數千首各種風格的熱門曲目都可以用于直播或內容創作,并且不會侵犯版權。
音效:數以千計的免版權音效
Stream Deck是觸發聲效的理想工具。從黑膠唱片刮擦聲和嘎吱作響的門到鼓掌聲和汽笛聲,“音效”板塊幾乎包含了所有事件或主題的聲音片段。與音樂一樣,Stream Deck 商店中的所有音效都沒有DMCA標記,也沒有版權風險。
Stream Deck控臺有6鍵、15鍵和32鍵等多個尺寸版本,以及一款帶有15個虛擬鍵的手機APP。
所有的Stream Deck用戶都可以通過Stream Deck 5.0輕松制作出高質量的視聽作品。
Stream Deck 5.0面向所有Stream Deck用戶開放,可以立即通過任何Stream Deck軟件版本免費下載。