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

基于TairSearch加速多列索引聯(lián)合查詢

TairSearch是集緩存與計算于一體的實時全內(nèi)存檢索系統(tǒng),其核心的倒排索引機制既能滿足詞根的模糊匹配查詢,也能作為熱數(shù)據(jù)存儲設(shè)備,實現(xiàn)存儲計算一體化,加速任意、多列索引的聯(lián)合查詢效率。

背景信息

互聯(lián)網(wǎng)及傳統(tǒng)行業(yè)應(yīng)用服務(wù)的關(guān)鍵數(shù)據(jù)通常存儲在MySQL等關(guān)系型數(shù)據(jù)庫中。為緩解數(shù)據(jù)庫訪問壓力,通常會引入Redis等Key-value緩存系統(tǒng)(KV緩存系統(tǒng))承擔熱數(shù)據(jù)的查詢,以提升查詢效能。然而,當業(yè)務(wù)場景需要在數(shù)據(jù)庫中進行多列索引聯(lián)合查詢或LIKE模糊匹配查詢時,普通的KV緩存系統(tǒng)無法較好地獨立支撐以上場景,往往需要引入Lua腳本或外部計算等額外的過濾匹配機制實現(xiàn)聯(lián)合查詢。

KV緩存系統(tǒng)在多列索引聯(lián)合查詢場景的局限性

在將數(shù)據(jù)導入至KV緩存系統(tǒng)時,以Redis為例,通常會將關(guān)系型數(shù)據(jù)庫的行數(shù)據(jù)導入至Redis的Hash結(jié)構(gòu):以行數(shù)據(jù)中主鍵字段的值作為Redis Hash的Key,其他字段名作為Hash的Field,其字段的值作為對應(yīng)Field的Value。

如果僅涉及查詢主鍵索引,則在Redis中可以直接通過HMGET的方式獲取指定字段的信息。但在關(guān)系型數(shù)據(jù)庫中,不僅可以存在主鍵索引,還可以設(shè)置多個二級索引以及多種聯(lián)合索引等,用于提高查詢效率。然而Redis在如下場景中存在明顯局限性:

  • 二級索引查詢:Redis不支持以Hash結(jié)構(gòu)中的field內(nèi)容進行查詢,因此只能在Redis中創(chuàng)建2層Hash結(jié)構(gòu)來存儲關(guān)系型數(shù)據(jù)庫中的二級索引。此方案不僅增加了導入數(shù)據(jù)的復雜度,也因數(shù)據(jù)冗余造成內(nèi)存空間浪費。

  • 聯(lián)合索引查詢:Redis不支持對Hash結(jié)構(gòu)進行多Key聯(lián)合查詢,用戶只能通過Lua腳本或外部計算實現(xiàn)聯(lián)合查詢。

本文以TairSearch支撐流量洪峰時的機票搜索業(yè)務(wù)為例,介紹如何通過TairSearch,加速任意、多列索引的聯(lián)合查詢效率。

說明

關(guān)于TairSearch的詳細介紹及命令示例,請參見Search

精準搜索機票示例

在暑期、國慶、春節(jié)等中長假期時,熱門旅游度假區(qū)的航班查詢?nèi)菀自斐闪髁亢榉濉T谠搱鼍跋拢梢詫⑺械拇w航班信息存儲至TairSearch中。

創(chuàng)建文檔索引

精準搜索機票

以某服務(wù)平臺的機票搜索界面為例,精準搜索機票涉及幾個關(guān)鍵條件:出發(fā)地、目的地、出行日期、艙位、是否帶兒童或嬰兒等。

本示例以出發(fā)地、目的地拼接作為TairSearch的Key(departure_destination),例如zhuhai_hangzhou。創(chuàng)建如下索引字段:出發(fā)地(departure)、目的地(destination)、出行日期(date)、艙位(seat)、是否帶兒童或嬰兒(with)、航班號(flight_id)、價格(price)、起飛時間(departure_time)、降落時間(destination_time)。

說明

如需增加或調(diào)整字段,可直接執(zhí)行TFT.UPDATEINDEX

代碼示例如下:

TFT.CREATEINDEX zhuhai_hangzhou '{
    "mappings":{
        "properties":{
            "departure":{"type":"keyword"},
            "destination":{"type":"keyword"},
            "date":{"type":"keyword"},
            "seat":{"type":"keyword"},
            "with":{"type":"keyword"},
            "flight_id":{"type":"keyword"},
            "price":{"type":"double"},
            "departure_time":{"type":"long"},
            "destination_time":{"type":"long"}
        }
    }
}'

預計輸出:

OK

寫入數(shù)據(jù)

整理航班信息,寫入TairSearch文檔,代碼示例如下:

TFT.ADDDOC zhuhai_hangzhou '{
    "departure":"zhuhai",
    "destination":"hangzhou",
    "date":"2022-09-01",
    "seat":"first",
    "with":"baby",
    "flight_id":"CZ1000",
    "price":986.1,
    "departure_time":1661991010,
    "destination_time":1661998210
}'

預計輸出:

"{"_id":"16615908912020060"}"
# 返回文檔ID,格式為JSON。

精準搜索

搜索2022年09月01日珠海至杭州,頭等艙座位的航班,且按照航班的出發(fā)時間進行排序,代碼示例如下。

TFT.Search zhuhai_hangzhou '{"sort":["departure_time"],"query":{"bool":{"must":[{"term":{"date":"2022-09-01"}},{"term":{"seat":"first"}}]}}}'

預計輸出:

"{
    "hits": {
        "hits": [
            {
                "_id": "16615908912020060",
                "_index": "zhuhai_hangzhou",
                "_score": 0.433955,
                "_source": {
                    "departure": "zhuhai",
                    "destination": "hangzhou",
                    "date": "2022-09-01",
                    "seat": "first",
                    "with": "baby",
                    "flight_id": "CZ1000",
                    "price": 986.1,
                    "departure_time": 1661991010,
                    "destination_time": 1661998210
                }
            }
        ],
        "max_score": 0.433955,
        "total": {
            "relation": "eq",
            "value": 1
        }
    }
}"