衡阳派盒市场营销有限公司

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

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

3天內不再提示

一次對API響應時間的優(yōu)化探索

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

一次對 API 響應時間的優(yōu)化探索。

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

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

從問題入手

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

在這款應用程序中,我們把書籍及其作者的目錄存儲在 MySQL 數(shù)據庫中。其中共包含約 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 秒左右才能執(zhí)行完成。

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

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

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

3、會使用 ORDER BY。

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

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

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

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

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

開始行動

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

我們?yōu)樗饕A袅?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 全文搜索的一些細節(jié) :

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

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

權衡取舍

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

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

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

希望我們的經歷能給大家?guī)硪稽c啟發(fā),祝編程愉快!

審核編輯:湯梓紅

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

    關注

    2

    文章

    1511

    瀏覽量

    62401
  • MySQL
    +關注

    關注

    1

    文章

    829

    瀏覽量

    26745
  • 響應時間
    +關注

    關注

    0

    文章

    11

    瀏覽量

    6943

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

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

收藏 人收藏

    評論

    相關推薦

    產品響應時間

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

    請問AD9144輸出響應時間

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

    SAR ADC響應時間實現(xiàn)迅速響應、快速控制的方法

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

    什么是響應時間

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

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

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

    光敏電阻響應時間研究

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

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

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

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

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

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

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

    面板響應時間有什么影響

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

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

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

    PLC的I/O響應時間

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

    進程響應時間是指什么

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

    影響VCO響應時間的因素

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

    光譜傳感器的響應時間

    光譜傳感器的響應時間是指傳感器從接收到光譜信號到產生穩(wěn)定輸出所需的時間。這個參數(shù)對于光譜傳感器的性能和應用至關重要。以下是對光譜傳感器響應時間的詳細分析:
    的頭像 發(fā)表于 01-27 15:36 ?110次閱讀
    百家乐官网怎么样玩| 新世纪百家乐官网的玩法技巧和规则| 百家乐专业豪华版| 华侨人娱乐城| 百家乐官网平玩法官方网址| 大发888娱乐城下载新澳博| 百家乐官网赌博导航| 网上百家乐试玩网址| 百家乐官网软件稳赚| 百家乐tt赌场娱乐网规则 | 天水市| 平博百家乐游戏| 在线玩轮盘| 百家乐高人破解| 名人线上娱乐城| 有关百家乐玩家论坛| 百家乐官网平台有什么优势 | 百家乐网络赌博地址| 百家乐官网最低下注| 高科技百家乐牌具| 哪个百家乐官网投注比较好| 威尼斯人娱乐城网址多少| 百家乐官网博乐城| 博彩业| 百家乐视频网络游戏| 百家乐官网有没有稳赢| 威尼斯人娱乐城 196| 永利百家乐官网娱乐网| 棋牌游戏下载| 信誉好百家乐平台| 广州百家乐官网赌场| 大发888注册娱乐账号| 百家乐官网乐赌| 百家乐官网色子玩法| 王子百家乐的玩法技巧和规则| 百家乐官网真人斗地主| 德州扑克专业版| 百家乐投注方法| 百家乐官网一黑到底| 太阳城娱乐城管理网| 网上百家乐哪家较安全|