日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Schema約束

Schema約束策略決定了數據寫入時是否校驗表是否存在、表結構是否一致、字段的數據類型是否一致。不同的數據寫入方式,支持的Schema約束策略不同。本文介紹Lindorm時序引擎Schema約束的概念和使用。

Lindorm時序模型的Schema

Lindorm時序引擎基于對時序領域中業務數據模型的理解與洞察,抽象出了時序數據表這一概念。因此,開發者在開發基于Lindorm時序引擎的應用程序時,可以類比傳統關系型數據庫中的關系表來訪問時序數據。

但是,時序數據模型本質上與關系型數據模型還是有所區別的。無論是在APM領域,還是IoT領域,或者是更偏傳統的工業領域,時序數據所表現出的數據模型更像是一個半結構化數據——有其遵循結構化定義的一面、也有可靈活擴展的一面,而不是完全等同于關系型數據庫的純結構化。而在實際應用中,隨著設備的不斷改進、升級、迭代,設備上報的數據模型變化可能也會很頻繁,包括設備上報字段的增加,字段類型的變更等等。

盡管在Lindorm時序引擎中,提供了ALTER TABLE語句用于變更時序數據表。但是在一部分時序應用場景下,如果對表的Schema約束嚴格如關系型數據庫,那么則有可能使應用開發變得更加困難。

在此背景下,Lindorm時序引擎提供了更加靈活的Schema約束策略。

Schema約束的含義

Schema約束通常體現在數據寫入層面,即寫入的字段是否與預先定義的表結構中包含的字段一致,寫入的字段數據類型是否與預先定義的數據類型一致或兼容,甚至寫入的表是否存在等等。在傳統關系型數據庫中,這些約束非常嚴格。

在Lindorm時序引擎中的Schema約束指的是以下行為:

  • 校驗數據寫入的目標表是否存在

  • 校驗數據寫入的標簽(Tag)或量測值(Field)是否已預先定義

  • 校驗數據寫入的數據類型與預先定義的數據類型是否一致

  • 保障數據查詢時字段返回類型的一致性

支持的Schema約束策略

Lindorm時序引擎目前提供三種Schema約束策略,分別是強約束、弱約束無約束。您可結合具體的業務需求選擇約束策略。

  • 強約束

    與傳統關系型數據庫類似,時序引擎會嚴格依據預先定義的表結構對寫入數據的表名、字段名、數據類型進行校驗。不匹配則寫入失敗。

  • 弱約束

    • 寫入數據的表不存在時,時序引擎不會報錯,而是會自動創建對應的表。

    • 寫入數據的新增一個標簽(Tag)或量測值(Field)時,時序引擎不會報錯,而是會在對應的時序數據表中自動添加一個標簽(Tag)字段或量測值(Field)字段。

    • 寫入數據的相同字段的數據類型發生變化時,時序引擎會檢測到字段的數據類型不匹配而寫入失敗。此時,請您執行ALTER TABLE語句手動修改字段的數據類型。

    說明

    弱約束策略并不意味著完全沒有校驗。例如給標簽(Tag)字段寫入非字符串數據,或給時間戳字段寫入非時間戳數據時,仍然會觸發校驗失敗。

  • 無約束

    不做任何約束。寫入數據的表不存在時,時序引擎不會報錯,寫入的數據可以通過兼容TSDB接口查詢。 如果手動創建了表,則可以使用SQL查詢,但是字段的數據類型不匹配不會報錯。

    說明

    無約束是為了兼容舊版TSDB接口而保留的一種策略,不建議使用無約束策略。

數據寫入方式與Schema約束的選擇

在Lindorm時序引擎中,數據寫入時的Schema約束策略與數據的寫入方式是密切相關的,具體如下表所示。

寫入方式

Schema約束策略

修改Schema約束策略的示例

JDBC Driver

僅支持強約束。

不涉及。

Java Native SDK

支持的約束策略:

  • 強約束(默認值)

  • 弱約束

  • 無約束

// 連接地址
String url = "http://ld-bp1489gr5t*****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242";
// 創建客戶端,LindormTSDBClient線程安全,可以重復使用,無需頻繁創建和銷毀
ClientOptions options = ClientOptions
        .newBuilder(url)
        .setSchemaPolicy(SchemaPolicy.WEAK)
        .build();
LindormTSDBClient lindormTSDBClient = LindormTSDBFactory.connect(options);

HTTP SQL API

僅支持強約束。

不涉及。

行協議

支持的約束策略:

  • 強約束

  • 弱約束(默認值)

  • 無約束

curl -X POST 'http://ld-bp1489gr5t*****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242/api/v2/write?db=default&schema_policy=WEAK' -d 'sensor,device_id=F07A1260,region=north-cn temperature=12.1,humidity=45 1619076780000'

多值寫入

支持的約束策略:

  • 弱約束

  • 強約束

  • 無約束(默認值)

 curl -X POST http://ld-bp1489gr5t*****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242/api/config -d'{"schema.policy.opentsdb":"WEAK"}'

單值寫入

僅支持無約束。

不涉及。