亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

從零構(gòu)建Go數(shù)據(jù)庫(kù)客戶(hù)端GoNavi:性能優(yōu)化與架構(gòu)實(shí)踐

從零構(gòu)建Go數(shù)據(jù)庫(kù)客戶(hù)端GoNavi:性能優(yōu)化與架構(gòu)實(shí)踐 最近一段時(shí)間我?guī)缀趺刻於家趲讉€(gè)不同環(huán)境的數(shù)據(jù)庫(kù)之間切來(lái)去。寫(xiě)業(yè)務(wù)聯(lián)調(diào)要連開(kāi)發(fā)庫(kù)排查線(xiàn)上問(wèn)題要掛只讀賬號(hào)偶爾還要導(dǎo)一份脫敏數(shù)據(jù)給同事做本地測(cè)試。手邊的工具要么笨重得像個(gè)簡(jiǎn)化版 IDE要么只是個(gè)簡(jiǎn)陋的命令行外殼于是我用 Go 從零攢了一個(gè)內(nèi)部工具取名 GoNavi。它是一款現(xiàn)代化、高性能的數(shù)據(jù)庫(kù)管理工具定位很明確啟動(dòng)快、內(nèi)存省、多環(huán)境切換不折騰。這篇文章記錄的是我實(shí)際踩過(guò)的坑和做過(guò)的取舍適合正在做同類(lèi)工具、或者想了解數(shù)據(jù)庫(kù)客戶(hù)端核心設(shè)計(jì)的同學(xué)參考。1. 為什么在“不缺數(shù)據(jù)庫(kù)客戶(hù)端”的年代我還想做 GoNavi市面上能連數(shù)據(jù)庫(kù)的工具其實(shí)不少有老牌的桌面客戶(hù)端也有網(wǎng)頁(yè)版控制臺(tái)還有各種以插件形式塞進(jìn)開(kāi)發(fā)環(huán)境里的擴(kuò)展。但真正用起來(lái)我還是經(jīng)常覺(jué)得哪里不對(duì)勁。不是功能不夠而是“太重”和“太慢”這兩個(gè)問(wèn)題常年存在。1.1 真實(shí)場(chǎng)景里的三個(gè)使用痛點(diǎn)先說(shuō)啟動(dòng)速度。有些桌面客戶(hù)端打開(kāi)就需要幾十秒中間還要檢查更新、加載一堆插件。很多時(shí)候我只是想跑一條select * from config limit 10卻要陪它完成一輪完整的“開(kāi)機(jī)儀式”。時(shí)間久了自然不愿意打開(kāi)它。再說(shuō)內(nèi)存占用。掛著數(shù)據(jù)庫(kù)客戶(hù)端寫(xiě)代碼它比我的編譯器還吃?xún)?nèi)存。我記得某次開(kāi)會(huì)時(shí)看了一眼活動(dòng)監(jiān)視器光是這一個(gè)工具就占了大幾百兆而它的主要任務(wù)只是讓我查看一張只有幾千行的表。這種開(kāi)銷(xiāo)放在今天確實(shí)說(shuō)不過(guò)去。最后是多環(huán)境切換。一個(gè)項(xiàng)目的連接信息可能有開(kāi)發(fā)、測(cè)試、預(yù)發(fā)、生產(chǎn)好幾套每套下面還有多個(gè)庫(kù)、多套賬號(hào)。傳統(tǒng)工具把這些全堆在連接列表里找起來(lái)累記密碼又擔(dān)驚受怕。一旦切換環(huán)境不小心連錯(cuò)庫(kù)后果就很尷尬。我需要的是“一眼看清我在哪個(gè)環(huán)境、連的是哪臺(tái)機(jī)器”的工具而不是一個(gè)越來(lái)越亂的通訊錄。1.2 GoNavi 給自己劃定的邊界不做一個(gè)“小 IDE”很多數(shù)據(jù)庫(kù)管理工具都在拼命加功能畫(huà) ER 圖、做團(tuán)隊(duì)協(xié)作、做數(shù)據(jù)字典、甚至內(nèi)置代碼生成器。功能多當(dāng)然好可代價(jià)是體積膨脹、邏輯復(fù)雜、調(diào)試?yán)щy。我一開(kāi)始就明確GoNavi 不做這些。它只解決四件高頻事連接管理、SQL 查詢(xún)、數(shù)據(jù)瀏覽、導(dǎo)入導(dǎo)出。至于復(fù)雜的數(shù)據(jù)庫(kù)設(shè)計(jì)、持久化腳本調(diào)試、團(tuán)隊(duì)權(quán)限審批那些已經(jīng)有更專(zhuān)業(yè)的平臺(tái)在負(fù)責(zé)。一個(gè)工具把常見(jiàn)場(chǎng)景做到足夠順暢比什么都做但每個(gè)都卡要強(qiáng)得多。這個(gè)邊界在開(kāi)發(fā)中給了我很大幫助。拒絕功能需求不會(huì)得罪用戶(hù)但交付一個(gè)好用的小工具遠(yuǎn)比交付一個(gè)未完成的“全家桶”更讓人放心。1.3 面向的用戶(hù)與使用場(chǎng)景GoNavi 的目標(biāo)用戶(hù)是每天都要跟數(shù)據(jù)庫(kù)打交道的開(kāi)發(fā)者、測(cè)試和運(yùn)維。它適合的場(chǎng)景包括打開(kāi)后三秒內(nèi)完成一次 SQL 查詢(xún)同時(shí)管理多套環(huán)境的連接信息但不會(huì)弄混需要把查詢(xún)結(jié)果導(dǎo)出為 CSV、SQL 或 JSON在性能敏感的大結(jié)果集瀏覽中不卡界面。一句話(huà)總結(jié)工具應(yīng)該“用完即走”而不是把用戶(hù)留在里面。2. GoNavi 的架構(gòu)分層重量被藏在了看不見(jiàn)的地方想明白要做什么之后最重要的事就是怎么搭骨架。數(shù)據(jù)庫(kù)管理工具本質(zhì)上是個(gè)“數(shù)據(jù)庫(kù)客戶(hù)端 復(fù)雜交互界面”的組合技術(shù)選型直接影響啟動(dòng)速度、內(nèi)存占用和跨平臺(tái)體驗(yàn)。2.1 核心選擇為什么后端只考慮 Go我?guī)缀鯖](méi)猶豫就選了 Go。原因有三點(diǎn)。第一靜態(tài)編譯。Go 能把整個(gè)后端編譯成一個(gè)獨(dú)立可執(zhí)行文件不依賴(lài)運(yùn)行環(huán)境放到哪臺(tái)機(jī)器上都能跑。對(duì)于一款要分發(fā)給不同開(kāi)發(fā)同學(xué)的工具來(lái)說(shuō)這比“先裝運(yùn)行時(shí)再裝工具”友好太多。第二并發(fā)模型。數(shù)據(jù)庫(kù)管理工具要同時(shí)維護(hù)多個(gè)連接、執(zhí)行多家查詢(xún)、處理異步導(dǎo)入導(dǎo)出任務(wù)。Go 的 goroutine 和 channel 讓這類(lèi)并發(fā)代碼寫(xiě)起來(lái)很自然而且單個(gè) goroutine 的內(nèi)存開(kāi)銷(xiāo)極小幾萬(wàn)路并發(fā)也能扛住。第三性能數(shù)據(jù)好觀(guān)察。Go 自帶內(nèi)存分析和 CPU 分析工具我能在開(kāi)發(fā)階段直接看到是哪個(gè)函數(shù)吃掉了內(nèi)存、哪段代碼拉長(zhǎng)了耗時(shí)。對(duì)于一個(gè)把“高性能”當(dāng)賣(mài)點(diǎn)的工具可觀(guān)測(cè)性非常重要。2.2 前后端分離但不分離部署內(nèi)嵌靜態(tài)資源方案Go 負(fù)責(zé)后端但數(shù)據(jù)庫(kù)管理工具的前端交互同樣重要?,F(xiàn)代數(shù)據(jù)庫(kù)客戶(hù)端都很重視表格展示、SQL 補(bǔ)全、主題切換這些體驗(yàn)這些能力用 Web 前端做最方便。所以 GoNavi 采用了“本地后端 內(nèi)嵌 Web 前端”的結(jié)構(gòu)Go 程序啟動(dòng)后拉起一個(gè)本地 HTTP 服務(wù)同時(shí)打開(kāi)一個(gè)本地 Web 界面。前端資源打包時(shí)被壓縮后塞進(jìn)二進(jìn)制文件里用戶(hù)拿到的依然是一個(gè)可執(zhí)行文件不用單獨(dú)部署前端。這種架構(gòu)的優(yōu)勢(shì)是內(nèi)存可控、渲染性能好。Go 后端負(fù)責(zé)數(shù)據(jù)庫(kù)連接和 SQL 執(zhí)行絕不阻塞界面Web 前端只負(fù)責(zé)展示和交互遇到大數(shù)據(jù)量時(shí)用虛擬滾動(dòng)表格渲染。前端不能直接接觸數(shù)據(jù)庫(kù)所有請(qǐng)求都經(jīng)過(guò)后端的一個(gè)本地接口天然隔離了風(fēng)險(xiǎn)。2.3 數(shù)據(jù)庫(kù)適配層用接口隔離方言差異連接不同的數(shù)據(jù)庫(kù)最麻煩的不是網(wǎng)絡(luò)協(xié)議而是 SQL 方言差異。字段引用符不一樣、分頁(yè)語(yǔ)法不一樣、事務(wù)隔離級(jí)別命名也不一樣。如果每接入一種引擎就把界面邏輯復(fù)制一份代碼很快就會(huì)腐爛。我在 GoNavi 里定義了一個(gè)很薄的適配層type Dialect interface { QuoteIdent(name string) string BuildLimit(offset, limit int) string IsConnError(err error) bool }QuoteIdent負(fù)責(zé)把表名、字段名按不同引擎的規(guī)則包上反引號(hào)、雙引號(hào)或方括號(hào)BuildLimit根據(jù)引擎生成分頁(yè)語(yǔ)句IsConnError用來(lái)判斷某個(gè)報(bào)錯(cuò)是不是屬于連接斷開(kāi)從而決定是否需要重連。這套抽象不需要很復(fù)雜只要能擋住 80% 的方言差異就夠。真正關(guān)鍵的 SQL 仍然由用戶(hù)自己寫(xiě)工具只負(fù)責(zé)把通用的“外殼”生成對(duì)。接入第二種引擎時(shí)我只新增一個(gè)實(shí)現(xiàn)文件界面代碼一行不用動(dòng)這為后來(lái)擴(kuò)展節(jié)省了大量時(shí)間。3. 性能瓶頸排查GoNavi 從“能跑”到“流暢”的優(yōu)化實(shí)錄功能跑通只是第一步。我第一次把 GoNavi 給身邊同事用時(shí)收到的反饋是“能用但一旦數(shù)據(jù)量大一點(diǎn)就卡”。于是進(jìn)入優(yōu)化階段這個(gè)階段讓我意識(shí)到數(shù)據(jù)庫(kù)客戶(hù)端的性能問(wèn)題大多出在三個(gè)地方連接管理、結(jié)果集讀取、界面元數(shù)據(jù)刷新。3.1 從“連接頻繁關(guān)閉”到“連接池管理”最初版實(shí)現(xiàn)很直接每次執(zhí)行 SQL 都新建連接執(zhí)行完就關(guān)閉。這種方式在測(cè)試環(huán)境沒(méi)問(wèn)題可一旦同時(shí)打開(kāi)多個(gè)查詢(xún)窗口再配上幾個(gè)后臺(tái)刷新任務(wù)連接數(shù)就會(huì)暴漲。數(shù)據(jù)庫(kù)端很快開(kāi)始報(bào)錯(cuò)前端表現(xiàn)為“某個(gè)查詢(xún)莫名其妙失敗”。排查后發(fā)現(xiàn)每個(gè) goroutine 都維護(hù)一個(gè)獨(dú)立連接而 goroutine 數(shù)量是隨著查詢(xún)窗口數(shù)量線(xiàn)性增長(zhǎng)的。我參照常見(jiàn)的連接池思路給 GoNavi 加了一個(gè)連接管理器每個(gè)數(shù)據(jù)庫(kù)連接歸入池中按 host、port、用戶(hù)名、數(shù)據(jù)庫(kù)名分組執(zhí)行 SQL 時(shí)從池中借用連接空閑超過(guò)設(shè)定時(shí)間才自動(dòng)回收連接池容量默認(rèn) 20上限可調(diào)避免并發(fā)打滿(mǎn)數(shù)據(jù)庫(kù)端連接數(shù)每個(gè)連接掛一個(gè) busy/idle 標(biāo)記防止同一連接被并發(fā)復(fù)用。加上連接池之后同樣的并發(fā)查詢(xún)?cè)僖膊粓?bào)錯(cuò)系統(tǒng)中最明顯的 CPU 峰值也消失了。這個(gè)改動(dòng)其實(shí)不復(fù)雜但收益立竿見(jiàn)影。3.2 從“結(jié)果集全量加載”到“流式分片傳輸”第二個(gè)瓶頸是內(nèi)存。有一次我在測(cè)試環(huán)境執(zhí)行一條查詢(xún)返回了十幾萬(wàn)行數(shù)據(jù)。GoNavi 直接把所有行讀進(jìn)內(nèi)存后再一次性發(fā)送給前端結(jié)果內(nèi)存直接飆高瀏覽器標(biāo)簽頁(yè)開(kāi)始轉(zhuǎn)圈等了半分鐘才把表格渲染出來(lái)。數(shù)據(jù)庫(kù)驅(qū)動(dòng)確實(shí)提供了行迭代接口關(guān)鍵是我沒(méi)有好好利用它。改用流式讀取之后GoNavi 每次只讀取一批數(shù)據(jù)比如兩百行就把這批數(shù)據(jù)通過(guò)本地 WebSocket 推給前端前端邊收邊渲染。整個(gè)過(guò)程中后端內(nèi)存不會(huì)隨著結(jié)果集行數(shù)線(xiàn)性增長(zhǎng)。rows, err : db.QueryContext(ctx, sql) if err ! nil { return err } defer rows.Close() batch : make([]map[string]any, 0, 200) for rows.Next() { row : scanRow(rows) batch append(batch, row) if len(batch) 200 { stream - batch batch make([]map[string]any, 0, 200) } } if len(batch) 0 { stream - batch }這對(duì)“瀏覽大結(jié)果集”的場(chǎng)景幫助極大。用戶(hù)拖到表格底部時(shí)前端會(huì)發(fā)起下一批加載請(qǐng)求感覺(jué)上像在操作普通表格但實(shí)際內(nèi)存占用很穩(wěn)定。3.3 從“每次自動(dòng)補(bǔ)全都查庫(kù)”到“本地元數(shù)據(jù)緩存”還有一個(gè)隱秘的卡頓來(lái)源是 SQL 編輯器。當(dāng)我輸入表名或字段名時(shí)需要自動(dòng)補(bǔ)全提示。最初版本只要輸入變化就向數(shù)據(jù)庫(kù)請(qǐng)求表結(jié)構(gòu)、字段列表導(dǎo)致輸入一個(gè)長(zhǎng) SQL 的過(guò)程里會(huì)觸發(fā)幾十次接口查詢(xún)。網(wǎng)絡(luò)慢一點(diǎn)整個(gè)編輯器就跟著卡。解決方案是做一層元數(shù)據(jù)緩存連接建立成功后GoNavi 在后臺(tái)異步讀取當(dāng)前庫(kù)的表清單、字段清單、索引等基本信息保存到內(nèi)存里自動(dòng)補(bǔ)全時(shí)直接查內(nèi)存緩存不再實(shí)時(shí)請(qǐng)求數(shù)據(jù)庫(kù)。只有當(dāng)用戶(hù)主動(dòng)點(diǎn)擊“刷新元數(shù)據(jù)”或連接超過(guò)一定時(shí)間沒(méi)有使用才會(huì)重新同步。這個(gè)調(diào)整讓 SQL 編輯器的輸入響應(yīng)從幾百毫秒降到個(gè)位數(shù)毫秒。更重要的是它避免了一個(gè)必然發(fā)生的尷尬在數(shù)據(jù)庫(kù)負(fù)載較高的時(shí)候用戶(hù)每敲一個(gè)字母都會(huì)給生產(chǎn)環(huán)境增加一次查詢(xún)這個(gè)影響在多人同時(shí)使用時(shí)會(huì)被放大。3.4 優(yōu)化效果的量化指標(biāo)優(yōu)化完成后我在一個(gè)內(nèi)部模擬項(xiàng)目 X 上跑了一組對(duì)比測(cè)試?yán)鋯?dòng)、空閑內(nèi)存、單次加載十萬(wàn)行結(jié)果集、同時(shí)發(fā)起十個(gè)查詢(xún)。結(jié)果放在后面第 6 部分集中展示這里先劇透結(jié)論流式讀取和連接池是最關(guān)鍵的兩個(gè)改動(dòng)沒(méi)有它們其他優(yōu)化都只是錦上添花。4. 一個(gè)可用版本是怎么長(zhǎng)出來(lái)的GoNavi 落地全過(guò)程從零到可交付功能順序很重要。我復(fù)盤(pán)了一下整個(gè)項(xiàng)目大致經(jīng)歷了七個(gè)階段。每個(gè)階段都有明確驗(yàn)收標(biāo)準(zhǔn)不貪多確保每一步都能獨(dú)立運(yùn)轉(zhuǎn)。4.1 第一階段用 REPL 驗(yàn)證核心鏈路不碰 GUI啟動(dòng)一個(gè)桌面工具之前我先寫(xiě)了一個(gè)極簡(jiǎn)的 REPL 命令行程序。它能讀入用戶(hù)輸入、建立數(shù)據(jù)庫(kù)連接、執(zhí)行 SQL、把結(jié)果以文本表格打印到終端。這個(gè)階段的好處是核心鏈路被壓到了最小范圍連接字符串解析、執(zhí)行查詢(xún)、讀取結(jié)果。任何一端出了問(wèn)題我都只需要在一個(gè)純文本環(huán)境里調(diào)試不用跟界面渲染、窗口事件糾纏。等到 REPL 能穩(wěn)定跑通增刪改查我才開(kāi)始設(shè)計(jì)界面。4.2 第二階段一個(gè)引擎走通再引入第二種引擎很多人的誤區(qū)是一開(kāi)始就追求“支持七八種數(shù)據(jù)庫(kù)”。GoNavi 反過(guò)來(lái)先只支持一種嵌入式文件型數(shù)據(jù)庫(kù)。因?yàn)檫@種引擎零配置、不需要額外服務(wù)端非常適合做自動(dòng)化測(cè)試和連續(xù)集成。等這種引擎全流程穩(wěn)定后再把它對(duì)接到某個(gè)常見(jiàn)的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)。一對(duì)接才發(fā)現(xiàn)最大的坑不是 SQL 語(yǔ)法而是連接參數(shù)解析和錯(cuò)誤分類(lèi)。于是我把連接串解析統(tǒng)一為“鍵值對(duì)配置”把錯(cuò)誤信息中的關(guān)鍵字映射成連接錯(cuò)誤、語(yǔ)法錯(cuò)誤、權(quán)限錯(cuò)誤等幾個(gè)大類(lèi)。第二個(gè)引擎接入后適配層的基本形態(tài)才固定下來(lái)。4.3 第三階段連接配置、加密存儲(chǔ)和 SSH 隧道桌面工具無(wú)法回避的問(wèn)題是如何保存密碼。直接明文存配置是一種安全災(zāi)難。GoNavi 采用本機(jī)主密鑰加密方案用戶(hù)第一次啟動(dòng)時(shí)生成一個(gè)主密碼用主密碼派生出加密密鑰再用這個(gè)密鑰加密所有保存的連接密碼。密鑰文件存放在本用戶(hù)目錄下權(quán)限設(shè)為當(dāng)前用戶(hù)唯一可讀寫(xiě)。除此之外SSH 隧道也是剛需。很多數(shù)據(jù)庫(kù)不允許直接暴露端口只能通過(guò)跳板機(jī)訪(fǎng)問(wèn)。我在此階段實(shí)現(xiàn)了本地端口轉(zhuǎn)發(fā)GoNavi 在本地監(jiān)聽(tīng)一個(gè)隨機(jī)端口通過(guò) SSH 隧道轉(zhuǎn)發(fā)到目標(biāo)數(shù)據(jù)庫(kù)端口真正連接地址填本地端口。這個(gè)階段還順便解決了隱藏問(wèn)題連接配置中的編碼格式。不同系統(tǒng)對(duì)中文用戶(hù)名、密碼、數(shù)據(jù)庫(kù)名的處理方式不一樣統(tǒng)一按 UTF-8 編碼后跨平臺(tái)導(dǎo)出導(dǎo)入連接配置才不容易亂碼。4.4 第四階段前端資源打包與產(chǎn)物瘦身Go 后端編譯出的二進(jìn)制文件本身不大但內(nèi)嵌 Web 前端資源后體積會(huì)明顯膨脹。我做了兩件事來(lái)控制產(chǎn)物體積前端源碼用壓縮器處理JS/CSS 盡量合并成一個(gè)文件圖片、字體都換成體積更小的 Web 格式不再額外依賴(lài)外部 CDN。最終打包出來(lái)的單文件體積控制在 20MB 左右對(duì)于現(xiàn)代硬盤(pán)和網(wǎng)絡(luò)來(lái)說(shuō)完全無(wú)感。啟動(dòng)優(yōu)化方面我刻意把本地 HTTP 服務(wù)監(jiān)聽(tīng)設(shè)為“延遲啟動(dòng)”只有用戶(hù)真正進(jìn)入某個(gè)界面需要 Web 前端時(shí)才拉起服務(wù)接口冷啟動(dòng)時(shí)先顯示無(wú)界面的連接狀態(tài)提示這樣一來(lái)首屏速度會(huì)快不少。我也嘗試過(guò)用加殼工具進(jìn)一步壓縮二進(jìn)制體積結(jié)果省下來(lái)了機(jī)器磁盤(pán)空間換來(lái)的卻是殺毒軟件誤報(bào)和啟動(dòng)解壓耗時(shí)增加。最后果斷放棄只保留常規(guī)瘦身。4.5 開(kāi)發(fā)節(jié)奏建議先做“能用的 80%”再做“精致的 100%”回想整個(gè)過(guò)程我踩過(guò)最浪費(fèi)時(shí)間的坑就是過(guò)早優(yōu)化界面細(xì)節(jié)。圓角像素、主題配色、圖標(biāo)陰影這些事做到一半往往會(huì)影響整體邏輯的推進(jìn)。正確的節(jié)奏應(yīng)當(dāng)是第一個(gè)可用版本只關(guān)心連接、查詢(xún)、列表展示三件事確認(rèn)打通后再考慮編輯表格、導(dǎo)入導(dǎo)出、自動(dòng)補(bǔ)全最后才打磨動(dòng)畫(huà)、快捷鍵和主題。把“用戶(hù)能不能順利走完一條查詢(xún)鏈路”作為每個(gè)階段的完成標(biāo)準(zhǔn)比“這個(gè)按鈕是不是多了一個(gè)像素”重要得多。5. 邊界場(chǎng)景踩坑清單這些坑比功能開(kāi)發(fā)更耗時(shí)間功能開(kāi)發(fā)是一步一步推出來(lái)的但真正把工具打磨到“敢給所有人用”還得靠邊界場(chǎng)景。下面這些坑每一個(gè)都真實(shí)出現(xiàn)在 GoNavi 的迭代過(guò)程中也最能體現(xiàn)工具的基本功。5.1 保留字、大小寫(xiě)和標(biāo)識(shí)符引用數(shù)據(jù)庫(kù)里最容易被忽略的問(wèn)題是表名或字段名撞了保留字。用戶(hù)建了張order表字段名叫做group直接拼接 SQL 會(huì)被數(shù)據(jù)庫(kù)解析成關(guān)鍵字執(zhí)行直接失敗。GoNavi 的處理方式是對(duì)所有由用戶(hù)填寫(xiě)的表名、字段名統(tǒng)一進(jìn)行標(biāo)識(shí)符轉(zhuǎn)義根據(jù)當(dāng)前方言生成帶引號(hào)的名稱(chēng)。比如某類(lèi)引擎用反引號(hào)包裹另一類(lèi)引擎用雙引號(hào)包裹。自動(dòng)補(bǔ)全彈出來(lái)的提示里也直接展示轉(zhuǎn)義后的 SQL 片段減少用戶(hù)手動(dòng)處理的心智負(fù)擔(dān)。大小寫(xiě)問(wèn)題同樣麻煩。某些數(shù)據(jù)庫(kù)在 Linux 下表名區(qū)分大小寫(xiě)在 Windows 上下單不區(qū)分有的引擎創(chuàng)建表時(shí)大小寫(xiě)保留查詢(xún)時(shí)大小寫(xiě)不敏感。GoNavi 在對(duì)象列表里會(huì)顯示原始大小寫(xiě)但查詢(xún)語(yǔ)句一律按用戶(hù)填寫(xiě)內(nèi)容原樣下發(fā)絕不額外改寫(xiě)避免“幫倒忙”。5.2 特殊字符密碼讓連接串“提前爆炸”連接串里有大量特殊字符時(shí)稍微處理不慎就會(huì)把解析器搞崩。我第一次寫(xiě)連接串解析時(shí)直接按切分鍵值對(duì)結(jié)果密碼里自帶符號(hào)連接串被切得七零八落。后來(lái)統(tǒng)一規(guī)則所有連接參數(shù)都通過(guò)編碼封裝進(jìn) JSON鍵值對(duì)之間不依賴(lài)分隔符而是由 JSON 結(jié)構(gòu)天然區(qū)分。這樣做之后密碼里哪怕有、#、?、空格這樣的特殊字符也不會(huì)干擾連接。5.3 編輯長(zhǎng)文本的斷電恢復(fù)問(wèn)題數(shù)據(jù)庫(kù)里常見(jiàn)大段文本或 JSON 字段測(cè)試時(shí)一旦編輯到一半連接突然斷開(kāi)或者用戶(hù)不小心切換了界面數(shù)據(jù)就會(huì)丟失。最初版并沒(méi)有做任何防護(hù)因?yàn)槲以跐撘庾R(shí)里把“編輯單元格”當(dāng)成了“普通輸入框”。后來(lái)我給長(zhǎng)文本編輯增加了“會(huì)話(huà)版本號(hào)”機(jī)制打開(kāi)編輯器時(shí)記錄原始值和版本號(hào)保存時(shí)對(duì)比版本號(hào)如果版本號(hào)變化說(shuō)明有其他操作改動(dòng)過(guò)這行數(shù)據(jù)就彈窗讓用戶(hù)選擇“強(qiáng)制覆蓋”或“取消”。這至少避免了靜默覆蓋問(wèn)題。真正要避免“編輯到一半丟失”還得靠自動(dòng)保存草稿。編輯器每三十秒把當(dāng)前內(nèi)容寫(xiě)到本地臨時(shí)文件極端退出后再次打開(kāi)會(huì)提示是否恢復(fù)。這個(gè)功能不復(fù)雜但用戶(hù)口碑提升很明顯。5.4 大批量刪除時(shí)的鎖與事務(wù)邊界在界面上選中一萬(wàn)行記錄然后點(diǎn)擊刪除如果直接生成一條DELETE FROM ... WHERE id IN (...)的大 SQL不僅分分鐘造成數(shù)據(jù)庫(kù)鎖競(jìng)爭(zhēng)還可能在執(zhí)行過(guò)程中因?yàn)榫W(wǎng)絡(luò)波動(dòng)全部回滾用戶(hù)被卡在等待狀態(tài)。GoNavi 對(duì)“刪除行”這類(lèi)操作做了一層拆分默認(rèn)按每批 500 行拆成多個(gè)小事務(wù)每批完成后記錄進(jìn)度用戶(hù)可取消。這樣既減小鎖粒度也避免失敗時(shí)全量回滾。當(dāng)然這類(lèi)操作必須默認(rèn)先打開(kāi)半自動(dòng)事務(wù)模式并且在執(zhí)行前展示“預(yù)計(jì)影響行數(shù)和批次數(shù)量”防止誤操作。5.5 版本差異“同一套代碼換臺(tái)機(jī)器就失敗”最讓人抓狂的問(wèn)題往往來(lái)自數(shù)據(jù)庫(kù)版本差異。同一段連接代碼在一臺(tái)機(jī)器上可以工作換一個(gè)數(shù)據(jù)庫(kù)版本就報(bào)認(rèn)證插件不兼容。這種現(xiàn)象通常不是 SQL 問(wèn)題而是驅(qū)動(dòng)與目標(biāo)版本握手機(jī)制不一致。我的對(duì)策是提供“兼容模式”開(kāi)關(guān)。當(dāng)用戶(hù)遇到莫名其妙的握手失敗時(shí)可以在連接配置里切換認(rèn)證方式GoNavi 會(huì)改用較舊的認(rèn)證協(xié)議包裝請(qǐng)求。這個(gè)能力讓我少接了上百個(gè)“為什么連不上”的咨詢(xún)。6. 性能對(duì)照與最終取舍GoNavi 的實(shí)測(cè)數(shù)據(jù)與保留原則說(shuō)了這么多架構(gòu)和坑最終還是要落到可量化的結(jié)果上。以下數(shù)據(jù)來(lái)自一個(gè)內(nèi)部模擬項(xiàng)目 X使用一臺(tái)普通四核十六 GB 內(nèi)存的辦公筆記本作為測(cè)試環(huán)境目標(biāo)數(shù)據(jù)庫(kù)是一張約十萬(wàn)行的模擬業(yè)務(wù)表。6.1 測(cè)試方法和注意事項(xiàng)為保證結(jié)果可復(fù)現(xiàn)測(cè)試方法固定如下冷啟動(dòng)數(shù)據(jù)完全退出進(jìn)程后重新打開(kāi)記錄到界面出現(xiàn)可操作狀態(tài)的時(shí)間空閑內(nèi)存數(shù)據(jù)啟動(dòng)后不做任何操作等待三十秒后采樣十萬(wàn)行結(jié)果集加載執(zhí)行一條全表查詢(xún)記錄從發(fā)起查詢(xún)到表格渲染完畢的總時(shí)長(zhǎng)并發(fā)十查詢(xún)用腳本同時(shí)觸發(fā)十個(gè)耗時(shí)查詢(xún)記錄失敗率。每項(xiàng)測(cè)試連續(xù)跑五遍取中位數(shù)避免偶然波動(dòng)。6.2 優(yōu)化前后對(duì)照數(shù)據(jù)指標(biāo)原型版優(yōu)化版說(shuō)明冷啟動(dòng)耗時(shí)520ms180ms主要收益來(lái)自本地服務(wù)延遲啟動(dòng)和靜態(tài)資源懶加載空閑內(nèi)存占用118MB48MB減少常駐連接數(shù)和前端預(yù)渲染開(kāi)銷(xiāo)十萬(wàn)行結(jié)果集加載6.8s1.2s流式讀取和分片傳輸是最大功臣十個(gè)并發(fā)查詢(xún)失敗率約 30%0%連接池解決連接數(shù)風(fēng)暴問(wèn)題單文件體積34MB19MB前端資源壓縮與合并這個(gè)表不是用來(lái)跟其他工具比高低的而是說(shuō)明一個(gè)樸素道理數(shù)據(jù)庫(kù)客戶(hù)端的性能問(wèn)題絕大部分可以由架構(gòu)調(diào)整解決而不是靠換更強(qiáng)的機(jī)器。6.3 做減法的三個(gè)保留原則性能優(yōu)化做完之后我給自己定下了三條絕不動(dòng)搖的保留原則。第一工具永遠(yuǎn)保持單文件分發(fā)。不依賴(lài)外部運(yùn)行時(shí)不開(kāi)后臺(tái)守護(hù)進(jìn)程用戶(hù)復(fù)制一個(gè)文件就能用。第二內(nèi)存占用不隨結(jié)果集線(xiàn)性增長(zhǎng)。大結(jié)果集必須走流式處理寧可前端慢慢渲染也不允許后端內(nèi)存爆掉。第三不在工具內(nèi)做“全家桶”。SQL 自動(dòng)補(bǔ)全和基礎(chǔ)診斷可以有但復(fù)雜建模、權(quán)限審批、多維報(bào)表這類(lèi)功能留給更專(zhuān)業(yè)的平臺(tái)。GoNavi 只做好數(shù)據(jù)查看和操作本身。最后再分享一個(gè)小技巧給 SQL 編輯器加自動(dòng)提交開(kāi)關(guān)時(shí)默認(rèn)狀態(tài)最好設(shè)置成“手動(dòng)提交”。很多用戶(hù)以為這個(gè)工具有自動(dòng)提交功能就不需要在意事務(wù)邊界結(jié)果誤操作后才發(fā)現(xiàn)回滾不了。這個(gè)問(wèn)題在數(shù)據(jù)庫(kù)管理工具里特別容易引發(fā)事故寧可讓用戶(hù)多點(diǎn)一下“執(zhí)行”按鈕也不要讓沒(méi)有感知的自動(dòng)提交成為隱患。到目前為止GoNavi 在內(nèi)網(wǎng)工具列表里已經(jīng)服役了挺長(zhǎng)時(shí)間最大的收獲并不是它跑得多快而是在開(kāi)發(fā)過(guò)程中終于弄明白一件被反復(fù)驗(yàn)證的事一款現(xiàn)代化、高性能的數(shù)據(jù)庫(kù)管理工具真正重要的不是堆更多的按鈕而是讓每個(gè)高頻操作都足夠順滑、足夠安全。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
性欧美91| 久久免费中文字幕在线观看| 国产精品久久久久无码A√| 亚洲色资源| 人人妻人人操人人乐| www.yw尤物| 玖玖玖玖精品国产剧情| 久久九九国产精品| 色牛牛AV| 大香樵伊人网| 青青草吊丝| 日本亚洲vr欧美不卡高清专区| 熟女性视频| 亚洲宅男天堂| 午夜精品久久久99| 久久亚洲色图中文字幕| 亚洲激情视频| 99热这里只有精| 亚洲综人| 精品久久久av无码免费| 美国三级日本三级久久99| 99热这里只有精品99| 亚洲 自拍偷拍 欧美| 亚洲情色综合| 男人的天堂Va| 亚洲亚洲亚洲天堂天堂| 97亚洲色图| 欧美天天射| 亚洲 图片 欧美 色图| 香蕉欧美| 天天干人妻| 伊人久操| 性色A∨91| 欧美狠狠弄| a一区二区三区乱码在线| 日韩资源网| 久久黄色性爱视频| 97资源站国产精品| 啊啊啊啊免费视频| 婷婷AV一区二区三区| 加勒比AV网| 啪啪免费| 人妻人久久精品中文字幕| 久草婷婷| 久草视频制服诱惑| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 97网色| 激情综合五月| 无码 有码 国产18p| 日日A∨| 久久久久久亚洲Av无码| 亚洲免费97免费| 成人性爱免费播放| 99青草| 夜夜性| 任你草| 就去色综合| 激情综合亚洲| 嗯嗯啊啊好爽| 国产25页| 极品另类| 又粗又长又大国产不卡| 不卡免费av在线播放| 久久精品国产亚洲av水密被窝| 精品无码一区二区三区| 91暧暧| 蜜臀99精品国产高清在线观看| 国产乱伦亚洲| 欧美黑人168页欧美黑人167| 欧美久久伊人| 亚洲高清自拍| 日韩99神马视频片| 大香蕉免费乱伦视频| 大屁股熟女一区二区三区| 久久精品店| 欲色综合| 日夜干射色啊| 色婷婷丁香五月| 一区二区三区国产在线播放| 亚洲色图 图片| 欧美在线干| 大学生美女口爆| 国产熟女精品区| 92人人操人人| 92性色国产午夜福利在线661| 青青欧洲黑| 综合五月婷婷| 国产精品自在线发布| juliaann欧美丝袜办公室| 欧美图片色综合| 亚洲成人碰碰| 天天躁日日躁AAAAXXXX国产 | 日韩国产十八禁| 久操精品网| 成人av在线播放| 久久这里只| 在线一区| 中国小夫妻勾搭露脸淫荡对白| 久久老子无码午夜伦不卡| 18禁止看精品中文字幕| 超碰97久久| 亚洲精品国产拍免费91在线| 欧美大色交| 久久九九一区二区三区成人| 区日韩亚洲乱码av电影| 人妻熟女一区在| 亚洲精品三| 久久亚洲精品成人av| 370p日韩欧美亚洲精品| 亚洲熟女性高潮久久久| 国产精品一二三在线看| 最新日产中文在线麻豆| 制服乱伦| 九九热AV| 色婷婷日韩精品一区二区三区| 久草视频分类在线| 色婷婷视频| 在线色导航| 超碰 97国产熟女| 性欧美| 成人无遮挡毛片免费看| 欧美日韩夜夜| 丰满人妻被猛烈进入中| 91老熟女逼| 青青草中文字幕| 天天插天天操| 色妇综合网| 五月丁香六月婷| 4tube欧美女厕所| 久久久久13| 另类欧美综合| 亚洲天堂东京热| av天堂电影网| 国产精品白虎| 欧美不卡在线一区二区| 欧美大战久久久伊人| se01国产在线视频| 欧美日韩美女精品久草一区二区三区| 黄色小视频日本txt| 91美女国产在线| 精品国产久热在线观看| 色色九区| 第二页中文字幕| www.99色| 久久综合av| 婷婷中文网| 青青操日韩| 免费夜夜爱黄色视频毛片| 一本久道久久综合狠狠爱一密臀精| 日本欧美国内在线| 国产一区在线播放| 夜夜 中文视频rt| 无码自拍SM| 欧美丝袜91| 4141514逼喷水三级片| 三级激情网站| 色网亚洲人| 黄页大片在线观看| 国产精品69人妻无码久久久| 亚洲 中文 欧美 日韩 在线| 日本精品一区三区| 亚洲另类小说卡通动漫| 欧美三四五区| 国产农村妇女精品一二区| 手机在线中文字幕国产| 久久久青青草| 亚洲少妇在线影音| 伊人91| 性夜影院爽黄A爽免费动漫| 五月天伊人| 久久久com| 亚洲AV秘无码一区..| 热热色国产一二区AV| 精品区9| 九九热久久99精品re| 91狠狠狠| 青春草A| 一区二区激情国产熟女| 国产精品色片一区二区| 精品免费视频国产一区| 日韩精品人妻中文字幕不卡乱码| 亚洲国产一级中文综合久久天堂在线免费观看| 欧美黄片欧美黄片xxx| 爱爱啊啊啊| 亚洲男人的天堂网| 日韩天堂av电影在线观看| 欧亚乱色熟女一区二区| 国产对白刺激视频| 香蕉黄色一级视频| 日韩av无码网站| 国产精品另类一区大香蕉| 麻豆九九九| 又黄又爽在线观看视频| 强免费黄色网址| 欧美经典一区二区三区| 在线观看一级α片刺激高潮视频| 亚洲色图亚洲| 看一级特黄a大一片| 亚洲黑人在线| 69精品| 日本高清一本二本免费不卡| 99热日| 伊人伊人LD| 欧美天天拍| 久99热| 日韩黄色一区二区三区| 日韩在线一区高清在线| 亚欧成人综合影院| 国产亚州日韩欧美看片| 國產尤物AV尤物在線觀看| 天天躁日日躁AAAAXXXX国产| 无码直播久久久| 夜草网站| 欧美成年人性爱视频免费观看| 国产激情在线| 女人天堂av在线播放| 国产精品久久久亚洲第一牛牛_在线观看| 亚热日本熟女| 国产热av| 蜜桃传媒视频第一区入口在线看| 丰满熟女人妻一区二区三五十一路| 啊啊啊啊二区好大| 超碰在线1234区| 伊人9| 日本亚欧爱爱| 国语少妇精| 亚洲影视综合| 久久亚洲中文字幕视频| 日本伦乱九九九综合| 五月天我淫我色av| 国产精品极品美女视频| 精品国产精品一区二区| 日日干夜夜操视频h| 欧美 熟女 日韩| 久久久天美| 男女啊啊啊| 国产内射爽爽大片| 国产精品国产自产高清AV| 国产AV久久野战精品| 美女操逼福利视频| 久久大线蕉一区| 在线免费试看60秒| 熟女人妻精品一区二区视频| 国产无码高清操逼视频| 国内精品久久久久影院亚洲| 日韩偷拍色图| 精品9999| 女性喷水高潮在线观看| 黄色区免费观看中文字幕| 人、人、摸,人、人、草| h在线看免费版在线看| 一本正道久久熟女| 大香蕉视频啪啪啪啪| 精品视频在线观看精品| 强奸乱伦Av网| 国产农村妇女一区二区| 国产视频小说| 亚洲麻豆av一区二区| 国产不卡免费在线视频| 亚洲一区二区三区久久 亚洲一区二区| 免看60秒涩涩视频| 免费看黄片现成| 免费a在线播放v| 欧美综合第一| 亚洲不雅视频1区二区| 欧美国产欧美在线观看| 九色 人妻 大香蕉| 欧美日本不卡| 亚洲色图尤物视频| 婷婷亚洲中文字幕在线| 国产九九九九九九| 亚洲AV无码AV吞精久久久久| 亚洲色图久久成人| 超碰色图| 大香蕉操久久| 亚洲黄色电影| 久9热| 亚洲色悠悠久久88| 老熟女搡BBBB搡BBBB视频| 日本一级一级一级一级| 亚洲欧美91√| 色官网色综合| 国产亚洲色婷婷99精品91| 免费操逼91| 激情第四色| 免费国产| 欧美日韩99| 亚洲999综合| 成人自拍三级在线观看| 午夜精品久久久久| 激情国产乱伦Av| 亚洲精品欧洲精品| 99这里只有精品国产| 亚洲国产综合久久天堂| 久久伊人最新网址视频| 在线啊啊啊啊| 日韩成人无码| 久久女人视频| 曰韩人妻中文字幕在线| 天天亚洲综合| 日韩熟女乱伦中出| 日韩视频小说在线观看 | 我爱搞逼综合网| 国产日逼视频| 亚洲综合另类色图| 久草五月| 无遮挡男女激烈动态图| 乱码熟妇人妻久久久| 欧洲性爱无码区| 宗合情欲网| 人人操我人人干| 久久熟女久| 亚洲国产精品无码AV在线| 制服中出中文人人精品| 中文字幕免费看大片| 久久久久深夜无码| 插入综合网| 国产精品懂色tv影视免费观看| 18精品一区| 天天谢天天干| 亚州,欧美在线| 热久久这里只有精品| 777超碰| 99久久久无码| 欧美另类精品xxxx| 91日韩国产欧美亚洲另类精盘州至城都| 长长久久曰曰夜夜成人网| 人妻一区二区三区四区视频| 91爱做| 最新国产精品久久精品| 日本道不卡| 97超碰亚洲| 国产高清精品福利| 男啪女色黄无遮挡免费观看| 久久超碰av在线| 99ri视频| 亚欧视频在线| 日日爱99| 国内成人圈中文字幕无码视频 | 国产美女销魂在线观看不卡| 秋霞福利网| 99热免费| 国产精品视频白浆免费| 91免费看一区二区三区| 哑洲在线| 久久久婷婷| 能看的AV| 囯产操逼片| 日本国产欧美一区三区二区| 婷婷九月丁香| 日韩无码AB| 91无码中出人妻视频| 超碰色男人操熟女| 人人妻人人澡人人爽久久av| 欧美97视频| 六六久久日韩不卡| 99热99色| 操比国产| 日韩精品视频在线观看一卡二卡| 激情小说图片亚洲首页| 亚洲日韩美女丝袜美腿人妻视频| daxiangjiao你懂的| 久超碰在| 99色| 亚洲国产无码精品首页久久久| 三级日本一区二区三区| 日韩小电影| 久久久九九| 国产地址二三| 欧美国产成人在线| 校园春色综合色| 久久国产99精品72福利| 丁香婷婷久久 | 婷婷视频在线免费观看| 狠狠婷婷亚洲中文综合久久| 韩国久久97| 日欧操屄| 日本福利二区视频| 国产亚洲色婷婷久久99精品91| 久草综合网| 五月丁香影院| 亚洲综合电影| 国产一区二区三区久久久精品| 波多野结衣先锋影音| 国产三级电影免费观看| av无线看| 欧美一级A片在线看视频性色| 国产女人高潮视频| 国产熟女完整版中字 | 99999精品| 三级片大波波| 蜜乳AV网址| 久久9精品视频| 啊啊啊要高潮了| 国产精品探花色| 久操网视频| 天天谢天天干| 成人午夜高潮av猛片| 97蜜桃综合| 一级AV性爱| 精品二区三四区五电影 | 91n美女视频| 国产少妇与亚洲av| 毛片视频白嫩| 欧洲乱码一区二区| 久久99深爱久久99精品| 日韩无码人妻中字久久三区四区| 久操97| 一区二区高清视频| 久久久亚洲Av| 色欲日韩欧美在线一区| 伊人天堂在线| 天天操天天日青青草超碰av| 超碰美国| 黄色片,com| 午夜精品探花| 久久久久久久少妇| 日韩久草| 97免费在线观看| a片偷拍视频| 日本性爱不卡视频| 亚洲。日韩。欧美| 青青青草伊人精品| 国产三级片在线观看| 熟妇综合一区二区三区| 国产综合操逼高清| 久久一留热品黄| 干妹子| 日本加勒比无码专区| 日韩操p| 操逼日韩无码| 秋霞一区二区三区四区五区六区七区| 亚洲激情深爱文学小说网站| 99久久久无码国产精品性啊聊| 26uuu偷拍亚洲欧洲综合| 乱色视频中文字幕| 都市激情人妻一区二区青青操视频| 欧美色老汉| 超碰免费人妻人人| 婷婷久久综合| 伊人少妇久久久| 人人搞人人插人人操| 国产成人www免费人成看片| 夜夜操天| 天天摸天天操视频| 青娱乐久久艹| 亚洲欧美日韩电影网站一区| 嗯嗯啊啊操我| 亚洲高清无码免费观看视频| 精品乱码久久久久| 精品国模无码| 99视频只有精品| 美女丝袜激情小说| 韩国手机不卡无码三级视频| 人妻夜夜爽天天爽麻豆三区网站| 婷婷人妻激情| 免费A V在线播放| 亚州综合色图| 999精品国产高清一区二区| 夜夜嗨一区二区| 羞答答AV中文字| 超97在线精品视频| 欧美日韩婷婷中文| 日本操逼视频导航| 少妇色综合| 精品国产一区二区三区在线播出| 风月影院男女十八禁| a级免费在线观看| 免费精品99| 9I1性色影院| www.av在线观看| 欧美一品道| 可能人人看人人摸| 欧美精品另类人妖xxxx| 亚洲高清欧美总合| 久久极品伊人| 爱爱啊啊啊| 91狠狠色丁香婷婷综合久久精品| 清纯唯美综合| 99热只有| 国产馆| 久久国产精品一级二级三级| 久午视频| 欧美亚洲综合色| 午夜精品久久久| 看日韩美女二区三区免费操逼视频 | 成人免费看吃奶视频网站| 日韩中字av一区| 日本色色色网站免费看不卡| 超91综合网| 欧美乱欲| 久久偷拍人| 91色人妻| 国偷自 一区二区| 人人射人人操人人摸| 少妇高潮九九九九九九九| 99热官网| 精品国产久久乱码| 五月丁香激情四射| 欧美永久激情一区二区| 国产精品亚洲一级av第二区| 北条麻妃性愛视频| 日韩 欧美 另类 人妻| 亚洲人久久久网| 欧美日韩激情无码专区| 国产9熟妇视频网站| 97人人操人人干| 九九九国产精品| 麻豆久久久一区二区| 69精品| 日韩三级久久久| 操逼逼一区视频| 先锋音影AV| 午夜黄色免费在线观看| 国产精品99999| 亚洲三级网址久久最新| 国产日韩在线播放av| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 91色色色| 成 人 A V免费视频在线观看| 亚洲网污污污污| 不卡啪啪视频| 欧美性爱精品七区| 一本大道青青| 色女99一级片在线观看| 国产亚洲禁久一区二区| 欧亚无码视频| 狠狠97| 超AV色女| 欧美日综合| 人妻精品免费一二三区| 亚州黄站| 自拍欧美| 欧美日韩高潮喷水91| 日韩探花精品在线视频| 久久久无码视频| 激情终合网| 麻豆精品久久久久久久| 国产人妻天天干精品| 国产精品香蕉| 日韩本不卡视频在线观看| 99www.bibizy香蕉资源国产一区二区三区高清 | 免费一级性爱久久| 亚洲 欧美 第一页 | 欧美色日| 99精品网站| 九九精品美女高溯喷水| 国产免费永久精品无码| 日本精品高清一二区一本到| 大象AV在线| 久99在线免费观看视频| 欧美色997| 五月丁香综合网| 日韩成人性爱AV| 370p日韩欧美亚洲精品| 激情色图| 91色欧美| 亚欧美综合网| 欧美日韩人妻精品一区二区三区| 美骚妇av高清在线| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 69一区二区三区| 成人资源中文字幕在线观看| 97精品国产97久久久久久免费| 色五月亚洲| 国产强奸超碰AV| 日韩欧美午夜视频在线| 人人操人人操人人操人人操人人操人人人11.CM| 欧美se综合| 易易A毛视频| 国内外毛片在线观看| 大香蕉之青青草原| 青青青草伊人精品| 久久综合久色欧美综合狠狠 | 伊人成人情色综合| 91熟女综合| 佐山爱中文字幕| 人妻人人澡人人爽人人| 久久久久久久久久黄色网 | 欧美人黑A片无码免视费| 青青草中文字幕| 男人综合网| 超清中文乱码字幕| 女人天堂av在线播放| 国产精品一区二区a| 天天澡天天爽日日AV| 九月伊人中文字幕| 日本精品中文字幕视频| 国产又猛又粗又爽又黄| 中国少妇XXXX做受| 亚洲中文字幕av| 久久婷婷五月天| 污到发麻的视频 国产| 天天淫人人妻日日色| 一区,二区,三区网站| 亚洲精品美女操逼| 日韩欧美天堂| 欧美 亚洲精品首页| 亚洲阿v天堂在线| 人人操人人操人人人操| 亚洲国产日韩欧美熟妇在线| 狠狠狠狠狠| 中日无幕一二三四区| 91美女視頻| 久久九九97| 国产高清亚洲日韩一区| 午夜寂寞欧美| 偷拍 精品另类 凸凹了四区| 日韩精品电影| 肥佬影院91| 肏逼视频日本| 亚洲国产激情国产av| 人人天天欧洲| 99re99视频在线免费观看| 欧洲性人爱视频| 天天欧美| 久久五月天婷婷丁香中文字幕| 多乙久久久久久| 精品女人999| 熟女高潮合集-永久久久-成人AV | 久久99网站| 91色噜噜狠狠| 超清中文乱码字幕| 殴美大黄片| 亚洲免费精品一区| 天天综合站| 欧美色97| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 久草免费在线一区二区| 男人天堂日日夜夜| 色淫网站优优视频| 日本激情免费大片| 五月婷婷hd| 97久久国产精品女不卡| 人妻熟女av国产网站| 欧美成人亚洲精品| 97AV在线观看| 丁香六月天| 色婷婷一区二区三区久久午夜| 国产精品人妻无码久久久老鸭窝| 国产欧美亚洲精品a第2页| 欧亚不卡| 日本操逼aaaaa| 激情小说五月天| 少妇与黑人高潮在线| 91欧美大片| 欧美激情综合色综合啪啪五月| 精品欧美日韩在线观看| 人人艹亚洲| 蜜桃中文字日产乱幕4区| 国产剧情在线| 人人操AV| 色欧美综合| 91丨九色丨国产打屁股| 五月天欧美色图| 91人妻尻屄视频| 91AV天堂| 日韩一区二区高清在线观看的| 欧美超碰96| 玖草在线视频| 中文字幕丝袜美腿| 国产品精品自在在线午夜免费| 精品区9| 欲香欲色综合天天伊人| 久久性爱城| 9精品久久久久| 亚洲日本韩国在线| 久操免费观看| 亚洲av在线免费观看| 亚洲一区二区av| 99热久| 亚洲欧美综合图片| 久久欧美按摩999| 尤物网站91| 久婷婷一区| 成年人三级黄色片视频| SUV一区二区在线看| 伊人色综合网电影| 中文字幕黄色一起草| 午夜精品久久久久久久男人的天堂 | 欧洲一区二区| 99在线精品观看99| 午夜小电影在线插入淫高潮| 国产性刺激| 日本操嫩b网| 黄日韩| 中文字幕成人| 精品人妻av区天天看片| 欧州激情视频在线一区二区| 国产99精品一区二区三区免费| 天堂精品| 久久精品一区二区三区不卡| 无码久久国产| 我想要啊 啊 啊| 日本 欧美 亚中文字幕| 操逼天美3区| 91超碰丝袜制服| 激情丁香婷婷| 精品人妻中文字幕4399| 免费国产| 欧州激情视频在线一区二区| 成人乱码一区二区三少妇| 五月天亚洲色图| 欧美成人色| 婷婷五月天无码| 日韩三级久久久| 最新三级网址| 成人免费性爱视视| 日韩人人精品| 亚州久久9| 性一交一乱一交A片久久四色| 国产女大学生AV| 国产AB视频| 色狠狠综合噜一二三区| 熟女视频久久| 精品国产乱码| 日韩无码一级黄色av片| 天堂精品一区| 天操天操夜操夜月操月年年操| 91狠狠综合久久| 白丝被操91| 91综合网| 亚洲精品黄码久久久久| 蜜臀无码一区二区| 国产久久视频| 开心激情婷婷| 国模精品一区二区三区苹果色戒| 国产在线观看一区二区三区| 五十路三区在线| 中文字幕一品色图| 99国内熟女露脸视频| 观看视频图片一区二区三区| 日韩精品一区二区日韩| 人妻二区| 91性色| 亚洲色人阁| 久草成人影片| 亚洲诱惑天堂| 97在线青| 色91综合网| 中文字幕老熟妇黄色视频| 亚洲Av无码成人精品国产| 大香蕉久| 亚洲三区视频| 亚洲国产一级精品毛一级精品看免费视频| 欧美色图片| 日韩成年人性爱视频| 夜夜躁狠狠躁日日躁av| 亚州欧美一区| 色亚州人久干视频在线观看免费版| 天天日日本| 91久久久视| 殴美日韩m| 日本一天色道久久久精品视频| 少妇国产不卡| 美腿丝袜偷拍亚洲欧美| 9超碰免费| 亚洲激情网一二三四区| 九九热九九热| 超碰久久性爱| 99热在线不卡| 成人久久精品| 天天干夜夜操一区二区| 精品无码一区二区人妻久久蜜桃| 国产AV天美传媒一区二区三区| 黄色十八禁| 1024精品在线| 草草草草视频| 操逼操逼操| 国产a片操逼| 国产黄片精品在线| 国产精品自产拍在线观看社区| 在线无码操| 丁香六月婷婷久久综合| 日韩另类色图| www.AV有限公司一区| 9999九九九久久久| 熟女少妇视频| 国产综合日韩伦理| 超碰精品国产无码| 美女写真| 色人久久| 久久少妇视频| 欧美激情黑人| 偷拍 亚洲 欧美| 欧美操人视频| 日韩性爱高清免费视频| 九九在线视频| 裸体美女久久久| 久久久久深夜无码| 人人搞人人插人人操| 亚洲国产成人高清在线| 歐美一級亂黃99在綫精品| 老女人老91妇女老热女| 制服中出中文人人精品| 天久久久噜噜噜久久国产精品爽爽| 9久久久久| 国产 热久久久久国产精品| 色婷婷香蕉| 欧美色天堂网在线视频| 偷窥自拍亚洲| 亚洲自拍天堂| 色播五月丁香| 啊啊啊不要嗯嗯在线观看| 日日骚中文字幕| 人人看人人摸人人色| 国内91熟女人妻丝袜天天精品视频在线 | 人人操人人摸avav| 黑丝日韩av丝袜av| 日本二三四区| 日韩亚洲国产视频| 天天弄欧美| 97久久超碰国产精品| 人妻 丝袜美腿 中文字幕| 日本天天操| 人妻另类| 欧美精品一区二区少妇免费A片| 国产三区免费在线观看| 性欧美天天| 久99在线免费观看视频| 久操视频资源站公开| av婷婷色网| 78超碰| 国产精品一区二区 尿失禁| 日韩99神马视频片| 淫荡网址| av优播| 九九九只有精品| 一起草日韩| 日本少妇va7777| 亚洲情欲| www.色综合| 91无码人妻精品一区二区三区蜜桃| 肏逼福利网站| 内射日韩大臀美女| 东京热综合久久一区二区| 爱射综合| 欧美亚洲清纯| 性爱1区| 亚州色阁| 国产三级多多影院2022国产AA一级毛片无码 | 亚洲综合影片| 成人97人人超碰人人| 九九天堂| 69av一区二区三区| 天天摸夜夜摸| 欧美色www亚洲国产阿娇要播| 国产精品一区二区三区在线密挑| 超碰97COm中文| 九九久久99| 美女性91| av大香蕉| 国产真实子伦对白| 青青11操操操操操操操操| 亚洲无码视频免费在线观看网址!| 1024人妻| 色婷婷国产精品一区在线观看| 国产激情久久| 97爱综合| 精品无码一区二区| 日韩在线性爱免费视频| 国产精品视频| 国产精品久久伊人| 人妻少妇无码| 日本特黄f c2| 亚洲无线观看久久| 99蜜桃臀亚洲成人在线观看| 国产成人 综合亚洲 天堂| 91欧美丨精品丨入口| 日韩国产不卡在线视频| 中文字幕欧洲有码| 五月婷婷综合在线| 亚洲国产精品成人综合| 玖玖资源中文字幕制服丝袜| 无码聚合| 女生看匆91网站| 日本九九久久99播| 天天操天天干一区二区 | 国产成人精品无码久久| 婷婷九月丁香| 色噜噜狠狠色综无码久久合欧美| 欧美人与动性人交a| 美日韩一二三区| 91五月天| 国产毛片毛片4p懂色| 人妻丝袜肏逼| 人妻AV在线| 狠狠色伊人亚洲综合网站色| 97操在线| 性站| www.伪伪| 久久久亚洲| 青青欧洲黑| 97精彩视频网站| 在线午夜成人无码视频| 亚洲高清在线se| 爽极品影院| 欧美综合网在线| 国产热av| 操人妻丝袜高跟| 国产日本久久免费精品| 翔田千里AV无码秘 三区| 制服丝袜第二页| 亚洲有码 欧美精品| 国产精品久久久久久片| 欧美亚洲高清| 久热精品在线| 97天天综合网| 国产超碰国产97| 99久久久er直播网址| 欧美不卡在线一区二区| 97精品视频在线| 蜜臀AV成人精品蜜臀| www超碰| 欧美国产伊人久久久久| 神马九九| 啊啊啊啊好多水| 天天性射网| 精品九九九九九九九| 老女人爆菊| 干婷婷综合网| 黄色电影观看久久9| 精品人妻一区二区三区在| 亚洲高清91| 伊人96在线| 成人天天爽| 亚洲综合在线高清| 久久精品免费| 亚洲女毛多水多21P| 人人操人人叉人人插人人| 精品国产乱码| 97精| 亚洲国产精品无码AV久久| 极品人妻少妇综合| 97久操| 大香蕉日亚洲日本亚大 | 日韩精品在线观看观看| 日婷婷| 国产强奸无码乱伦| 插入逼91| 国产福利合集| 午夜操一操| 酒色综合网| 欧色网址| 国产极品馒头逼| 中国少妇啪啪视频| 综合欧美亚洲| 91麻豆天美传媒在线| 伊人加勒比| 亚洲熟女综合网| 日本一级真人黄色性爱视频| 久久机热| 亚洲 欧美 日韩另类 麻豆| 午夜美女诱惑电源网| 91老妇女| 天天综合网在线观看| 亚洲视频精选| 探花视频免费观看国产专区| 日va操| 日本精品第一视频在'| 午夜影美女日鸡鸡天天视频国产| 欧美一区二区观看在线| blacked精品一区国产| 丰满人妻无码一区二区三区| 国产激情在线观看| 翔田千里av一区二区三区| 五月天婷婷影院| 人人色97| 91丝袜激情在线 | www.伪伪| 91精品无码久久久久久久| 一个国产在线综合网站| 在线人人人人人人精品超| 中国探花熟女| 国产精品久久久亚洲一区| 神马福利久草| 性爱AV天堂| 很狠操| 蜜臀久久99精品久久久久久-DVD原版全| 精品国产三级av韩国在线| 亚洲精品成人动漫在线| 久久久 国产精品| 精品色色| 亚洲色悠悠久久88| 黄页网站成人免费| 中文字幕久久婷婷丁香五月天| 男人a天堂手机在线版| 欧美精品日韩一区二区| 日韩在线人妻网站| 97热视频在线观看| 91天天| av天堂精品久久| 首页亚洲国产高跟丝袜诱惑视频| 亚洲欧美另类少妇精品| 国产精品久久久久久夜夜夜夜| 中文字幕一区二区三区50路| 亚洲欧洲无码bt精品合集| 熟女突然公开看18禁影片 | 国产熟女一区二区丰满| 九九这里只有精品| 五月亭亭六月丁香| 国产 丝袜 欧美中文 另类| 中亚精品极乱| 蜜桃臀一区二区aV | 97色色色综合网站| 中文字幕黄色一起草| 蜜臀无码视频在线观看| 九九人人操| 韩日男人的天堂| 亚州欧美在线| 777AV电影| 五月天开心网| 91老妇女| 色操逼网| 九九九九九九亚洲| 久久中文字幕在线观看| 福利操逼| 天天亚洲综合| 青青草一区二区高清无码视频| 日本人妻中文字幕| 久操大香蕉手机视频在线看| 亚洲精品国产av天美传媒| 欧美Ⅴ性爱| 一级黄色影片| 后入精品| 插欧洲美女欧美精品| 欧美色一二三| 三级日韩一区二区三区| 丁香五月偷拍| 激情文学亚洲| 国产 日韩 另类 视频一区爱| 欧美天堂日韩三级国产传媒| 97精品| 91超碰人人操| 成人情色综合网| 精品性爱一二三区| 99热 按摩 日韩| 久久午夜鲁丝片| 中文字幕国产精品1区| 天天综合网在线91| 五月激情综合网| 日日爽熟女| 色播五月婷婷| 九九九九九九九九九九九九九九九女| 日韩免费高清大片在线| 国产精品亚洲四五区在线观看| 97色在线视频| 18一区二区三区| 一起草视频在线| 天天干天天干天天干| 欧综合网| 五月天成人综合| 欧美色网络| 精品国产网站| 另类天堂| 国产农村妇女精品1区二区| 无码人妻精品酒店| 欧美性,色九九| 国产亚洲精品美女久久久| 好吊色一区| 操逼www.| 亚洲熟女一区二区| 毛片电影一区二区三区| 午夜欧美精品久久久| 在线国产探花| 男女国产精品| caopeng97| 欧美精品三区| 人人搡人人肉久久精品| 老司机午夜精品视频| 国产超碰在线一区| 久久av一级av少妇av高潮| 国产精品在线网站| 久久久 国产精品| 精品久久久久久久| 久久综合18p| 中文字幕乱在线伦视频中文字幕乱码在线 | 国产成人天堂| 国产97视频免费观看| 欧美 亚洲精品首页| 天天香香欲综合| 熟妇xxxxx性春色| 91麻豆天美国产欧美高潮| 婷婷五月天综合网| 国产二区三区免费视频| 操死我了啊啊啊| 99热超碰| 26uuu性| 国产免费内射视频| 欧美日韩国第一区| 亚洲成熟国产精品美女| 乱色老一区二区三区的观看方式| 亚洲综合色网| 亚洲字幕一区二区| 久区视频| 麻豆一区二区三区精品| 337p大胆噜噜噜噜噜91Av| 久久免费少妇| 天天综合站| 蜜桃中文字日产乱幕4区| 3d成人精品一区二区| 夜夜爽夜夜高潮夜夜爽| 一区麻豆 高清中文字幕| 国产超碰| 午夜男人av| 九九九九九九九九九国产精品 | 日日夜夜模| 国产精品一二三区福利| 免费的很黄很污的全部视频 | 91色艳| 性爱1区| 思思热在线视频在线| 天美传媒精品久久视频| 久久 亚洲 日韩 人妻| 亚欧性爱在线无码| 国产 日韩 欧美高清| 三久久久四久久久久| 天天综合麻豆视频| 中文字幕乱码人妻一区二区三区,99精品 | 920日本午夜免费| 国产日韩在线播放| 亚洲熟女性高潮久久久| 99无码| 麻豆av一区二区| 91色伦| 色天堂综合| 日han少妇无码| www老逼91| 99视频精品| 免费的黄片wwwwww| 欧洲成人性爱视频| 波多野结衣之双飞调教在线播放 | 91干熟女| 操高情无码| 中国国产精品一区视频| 78操B| 狠狠入| 后入精品| 欧美精品丝袜久久久中文字幕| 人妻熟女字幕一区二区| 狠狠综合网| 人妻99p| 欧美,日韩,亚洲视频| 91快色色色色色| 色翁荡息又大又硬又粗又爽| 强奸乱伦免费网站| 日本黄色精品专区网站| 亚洲欧美国产其他二区| 久久久久久久国产a∨| 日本色色色色色视频| 大香蕉一区二区在线观看.| 欧美性爱日韩高清| 天天操人人操狠狠插| 一二三区精品视频| 欧美人妻少妇| 国产又黄又爽| 精品一区二区三区18| 大奶的诱惑| 9久在线视频只有精品| 日本操逼aaaaa|