色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一次對API響應時間的優化探索

我快閉嘴 ? 來源:AI前線 ? 作者:Ankit Joinwal ? 2022-09-20 11:50 ? 次閱讀

一次對 API 響應時間的優化探索。

在這普通的一天,我們用著普通的 API,突然發現響應速度過慢的警報意外亮起。

結果顯示,我們的 API 需要約 70 秒的時間才能對常規流量下的客戶端做出響應。開什么玩笑……

從問題入手

先向大家匯報一下我們的這個慢速 API 是做什么,又是怎么做的。

在這款應用程序中,我們把書籍及其作者的目錄存儲在 MySQL 數據庫中。其中共包含約 6800 萬本書,每本書對應一家出版社。

下面來看書籍和作者的表結構。

CREATE TABLE `book` (
  `id` int NOT NULL AUTO_INCREMENT,
  `book_uuid_bin` binary(16) NOT NULL,
  `publishing_house_uuid_bin` binary(16) NOT NULL,
  `display_name` varchar(750)  NOT NULL,
  `normalized_name` varchar(750) NOT NULL,
  `description` varchar(1000) DEFAULT NULL,
  `level` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_book_uuid_bin` (`book_uuid_bin`),
  KEY `book_description_idx` (`description`(768)),
  KEY `book_display_name_idx` (`display_name`),
  KEY `book_normalized_name_idx` (`normalized_name`),
  KEY `publishing_house_uuid_bin_idx` (`publishing_house_uuid_bin`),
  KEY `book_uuid_bin_idx` (`book_uuid_bin`)
)
CREATE TABLE `publishing_house` (
  `id` int NOT NULL AUTO_INCREMENT,
  `publishing_house_uuid_bin` binary(16) DEFAULT NULL,
  `display_name` varchar(750) NOT NULL,
  `normalized_name` varchar(750) NOT NULL,
  `alias_uuid_bin` binary(16) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_publishing_house_uuid_bin` (`author_uuid_bin`),
  KEY `publishing_house_normalized_name_idx` (`normalized_name`),
  KEY `publishing_house_display_name_idx` (`display_name`)
)

再說回 API,其用例是在 UI 上提供自動補全功能,方便用戶更好地查找特定出版社出版的書籍,同時保證用戶的查詢字符串同書籍名稱或描述的前綴相匹配。

API 中使用的 MySQL 查詢如下所示:

select book_uuid_bin,
       display_name,
       normalized_name,
       description,      
       author_uuid_bin 
from book
where
     ((lower(display_name) like lower("%Software E%") or  lower(description) like lower("%Software E%")) and publishing_house_uuid_bin = UUID_TO_BIN("d2230981-e570-5ba4-9a3a-16028c51d54f"))order by display_name asc limit 100;

即使查詢在單表上就能完成,不需要連接作者表,這條 SQL 查詢也需要 7 秒左右才能執行完成。

我們在 where 子句所使用的列上建立了索引。但這一實現還是存在問題,包括:

1、display_name 和 description 等列屬于 VARCHAR 類型。

2、會在 VARCHAR 類型列上使用帶有 OR 子句的 LIKE 運算符。

3、會使用 ORDER BY。

4、 WHERE 子句中使用的所有列,都缺少復合索引。

5、表中共包含 5800 萬條記錄。

我們曾嘗試在查詢中使用的各列上創建一個復合索引,但最終發現無濟于事。因為對于 RDBMS 數據庫內的大表來說,在 VARCHAR 列上搜索文本的效率就不可能太高。

我們知道 Elasticsearch 提供全文本搜索功能,所以想在自己的用例中試試看。我們一直在用 AWS 的云服務,因此選擇了相應的 AWS OpenSearch 服務。

Amazon OpenSearch 托管服務能幫助用戶輕松在 AWS 云中部署、操作和擴展 OpenSearch 集群。Amazon OpenSearch 是 Amazon Elasticsearch 的繼任方案。

開始行動

我們通過腳本將表數據從 MySQL 加載到了 AWS OpenSearch 集群當中。整個數據遷移過程大概用了幾個小時。

我們為索引保留了 5 個分片和 1 個副本因子。

我們還為用例編寫了一條等效的 OpenSearch 查詢,具體如下所示:

API — POST /books-catalog/_search

{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "publisherUuid": "1f754fc0-610c-5b29-b22b-fa8140afb7be"
          }
        },
        {
          "bool": {
            "should": [
              {
                "match_phrase": {
                  "displayName": "Software E"
                }
              },
              {
                "match_phrase": {
                  "description": "Software E"
                }
              }
            ]
          }
        }
      ]
    }
  },
  "size": 100,
  "sort": [
    {
      "displayName.keyword": {
        "unmapped_type": "keyword",
        "order": "asc"
      }
    }
  ]
}
結果

我們的 API 響應速度直接縮短至 70 毫秒以內。

API 響應速度提高了 1000 倍!

關于 OpenSearch 全文搜索的一些細節 :

在 ElasticSearch 中對文檔進行索引(創建)時,AWS OpenSearch 會對字符串類型的字段使用文本分析器。

文本分析器會將字符串字段拆分為多個 token,為各 token 構建內部索引,然后根據查詢中提供的 token 進行匹配。

權衡取舍

為了避免重寫整個服務,同時盡快在 MySQL 切換至 AWS OpenSearch 后恢復正常生產,我們決定只在這個特定用例中使用 OpenSearch。

而且速度提升 1000 倍的代價,就是多了一套需要在 OpenSearch 當中維護的數據副本。但由于我們的數據大多是靜態的,持續更新量非常有限,所以維護強度和成本都很低。

可以看到,選擇正確的數據庫引擎往往會給業務用例帶來翻天覆地的提升。

希望我們的經歷能給大家帶來一點啟發,祝編程愉快!

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • API
    API
    +關注

    關注

    2

    文章

    1530

    瀏覽量

    62761
  • MySQL
    +關注

    關注

    1

    文章

    836

    瀏覽量

    26934
  • 響應時間
    +關注

    關注

    0

    文章

    11

    瀏覽量

    6963

原文標題:將 API 從 MySQL 遷移到 AWS OpenSearch 后,我們將響應時間提高了 1000 倍

文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    產品響應時間

    大家好,我正在做個光開關的控制,老師要求我對產品的響應時間個仿真跟優化,基本工作電路是MCU控制升壓芯片的電壓,要求對從MCU發出升壓命令到升壓穩定的這
    發表于 06-16 22:20

    請問AD9144輸出響應時間

    系統需求是個反饋測試系統,需要根據當前ADC采樣后計算結果分析后,決定下一次DAc輸出的波形。現在的問題是,系統對從ADC輸入信號到DAC輸入信號,給的響應時間只有100ns,且是關鍵指標不能放松
    發表于 08-03 06:55

    SAR ADC響應時間實現迅速響應、快速控制的方法

    如何優化系統響應時間 (tRESP) 上來。其中個比較有效的方法是在設計中的不同“非實時”塊上,即ADC,主機控制器和DAC,安排系統響應時間。ADC的
    發表于 09-12 11:46

    什么是響應時間

    什么是響應時間      響應時間是指液晶顯示器各像素點對輸入信號反應的速度,即像素由暗轉亮或由亮轉暗所需要的時間(其原理是在液晶分子內
    發表于 05-24 21:53 ?5620次閱讀

    什么是液晶電視的響應時間

    什么是液晶電視的響應時間   響應時間是液晶電視各像素點對輸入信號反應的速度,即像素由暗轉亮或由亮轉暗所需要的時間(其原理是在液晶分子內
    發表于 03-27 13:29 ?4490次閱讀

    光敏電阻響應時間研究

    用半定量方法研究了光敏電阻的響應時間與照射光的照度和波長的關系,并給出了光敏電阻的上升時間和下降時間的測量方法.該實驗可作為本科生的探索性實驗。有助于培養學生的綜
    發表于 09-20 17:00 ?90次下載
    光敏電阻<b class='flag-5'>響應時間</b>研究

    測量光耦響應時間的簡單電路

    測量光耦響應時間的簡單電路
    發表于 06-04 11:53 ?2023次閱讀
    測量光耦<b class='flag-5'>響應時間</b>的簡單電路

    SAR ADC 響應時間:迅速響應、快速控制

    快速響應時間優化設計。在這個系列博文中,我們將討論SAR DAC響應時間和幾種實現設計最佳效果的方法。 當我們考慮模擬電子元器件時: 系統的高精度要求轉化為你的模擬塊(放大器、基準、傳感器等)和混合信號塊(ADC,DAC等)所
    發表于 04-18 02:17 ?1127次閱讀
    SAR ADC <b class='flag-5'>響應時間</b>:迅速<b class='flag-5'>響應</b>、快速控制

    什么是單片機的中斷響應時間

    中斷響應時間:從外部中斷請求有效(外部中斷請求標志置1)到轉向中斷入口地址所需要的響應時間。每個機器周期的S5P2時刻,INTx引腳的電平被鎖存到內部寄存器中,待下個周期查詢。
    發表于 12-19 15:57 ?1w次閱讀
    什么是單片機的中斷<b class='flag-5'>響應時間</b>

    面板響應時間有什么影響

    響應時間個計算機,顯示器成像等多個領域的概念,在網絡上,指從空載到負載發生個步進值的變化時,傳感器的響應時間
    的頭像 發表于 01-14 14:56 ?4087次閱讀

    基于異構多核的多類型DAG響應時間分析

    基于異構多核的多類型DAG響應時間分析
    發表于 06-15 14:08 ?22次下載

    PLC的I/O響應時間

    響應時間是指 plc 接收到個輸入信號以后,到輸出控制信號所需的時間。當 CPU 接收到對應于輸入刷新周期的輸入信號時,用于響應時間取決
    的頭像 發表于 10-05 09:23 ?4995次閱讀
    PLC的I/O<b class='flag-5'>響應時間</b>

    進程響應時間是指什么

    進程響應時間是指從發出請求到收到響應時間間隔,是衡量系統性能和用戶體驗的重要指標之。在計算機系統中,進程是指個正在運行的程序實例。當用
    的頭像 發表于 11-17 11:31 ?1198次閱讀

    影響VCO響應時間的因素

    VCO(Voltage-Controlled Oscillator,壓控振蕩器)的響應時間個關鍵的性能指標,它反映了VCO在接收到控制電壓變化后,其輸出頻率達到穩定狀態所需的時間。然而,要詳細
    的頭像 發表于 08-20 16:07 ?702次閱讀

    光譜傳感器的響應時間

    光譜傳感器的響應時間是指傳感器從接收到光譜信號到產生穩定輸出所需的時間。這個參數對于光譜傳感器的性能和應用至關重要。以下是對光譜傳感器響應時間的詳細分析:
    的頭像 發表于 01-27 15:36 ?196次閱讀
    主站蜘蛛池模板: 国语对白嫖老妇胖老太 | 亚洲高清中文字幕 | 国产爱豆果冻传媒在线观看 | 性生交片免费无码看人 | 暖暖视频免费观看高清完整版 | 国产午夜人成在线视频麻豆 | 在线看无码的免费网站 | 九九精品久久 | 久久99精国产一区二区三区四区 | 亚洲中文在线精品国产 | 国产毛多水多高潮高清 | 55夜色66夜亚洲精品播放 | 暖暖视频免费观看视频 | 国产成人精品久久久久婷婷 | 国产亚洲精品久久久久久国模美 | 国产免费看黄的私人影院 | 嫩草影院久久国产精品 | 热综合一本伊人久久精品 | 国产成人精品免费视频大全可播放的 | 国产高清亚洲 | 亚洲综合AV在线在线播放 | 蜜桃色欲AV久久无码精品 | 亚洲午夜精品一区二区公牛电影院 | 免费高清在线影片一区 | 后入式啪gif动态图 后入式狂顶免费视频 | 国产乱辈通伦影片在线播放亚洲 | 99在线免费观看 | 伊人青青青 | 最近日本MV字幕免费观看视频 | 这里只有精品网 | AV天堂午夜精品一区 | 四房播播开心五月 | 熟女强奷系列中文字幕 | 美女露出撒尿的部位 | 中文字幕亚洲欧美在线视频 | 亚洲综合免费视频 | 在线观看免费亚洲 | tube日本护士 | 97超级碰久久久久香蕉人人 | 噜噜噜在线AV免费观看看 | 亚洲视频在线看 |