日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

代码实现sql编译器_TiDB-Wasm 原理与实现 | Hackathon 优秀项目介绍

發(fā)布時(shí)間:2023/12/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码实现sql编译器_TiDB-Wasm 原理与实现 | Hackathon 优秀项目介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:Ti-Cool

上周我們推送了《讓數(shù)據(jù)庫(kù)運(yùn)行在瀏覽器里?TiDB + WebAssembly 告訴你答案》,向大家展示了 TiDB-Wasm 的魅力:TiDB-Wasm 項(xiàng)目是 TiDB Hackathon 2019 中誕生的二等獎(jiǎng)項(xiàng)目,實(shí)現(xiàn)了將 TiDB 編譯成 Wasm 運(yùn)行在瀏覽器里,讓用戶無需安裝就可以使用 TiDB。
本文由 Ti-Cool 隊(duì)成員主筆,為大家詳細(xì)介紹 TiDB-Wasm 設(shè)計(jì)與實(shí)現(xiàn)細(xì)節(jié)。

10 月 27 日,為期兩天的 Hackathon 落下帷幕,我們用一枚二等獎(jiǎng)為此次上海之行畫上了圓滿的句號(hào),不枉我們風(fēng)塵仆仆跑去異地參賽(強(qiáng)烈期待明年杭州能作為賽場(chǎng),主辦方也該鼓勵(lì)鼓勵(lì)杭州當(dāng)?shù)氐男』锇檠?:D )。

我們幾個(gè) PingCAP 的小伙伴找到了 Tony 同學(xué)一起組隊(duì),組隊(duì)之后找了一個(gè)周末進(jìn)行了“秘密會(huì)晤”——Hackathon kick off。想了 N 個(gè) idea,包括使用 unikernel 技術(shù)將 TiDB 直接跑在裸機(jī)上,或者將網(wǎng)絡(luò)協(xié)議棧做到用戶態(tài)以提升 TiDB 集群性能,亦或是使用異步 io 技術(shù)提升 TiKV 的讀寫能力,這些都被一一否決,原因是這些 idea 不是和 Tony 的工作內(nèi)容相關(guān),就是和我們 PingCAP 小伙伴的日常工作相關(guān),做這些相當(dāng)于我們?cè)?Hackathon 加了兩天班,這一點(diǎn)都不酷。本著「與工作無關(guān)」的標(biāo)準(zhǔn),我們想了一個(gè) idea:把 TiDB 編譯成 Wasm 運(yùn)行在瀏覽器里,讓用戶無需安裝就可以使用 TiDB。我們一致認(rèn)為這很酷,于是給隊(duì)伍命名為 Ti-Cool(太酷了)。

WebAssembly 簡(jiǎn)介

這里插入一些 WebAssembly 的背景知識(shí),讓大家對(duì)這個(gè)技術(shù)有個(gè)大致的了解。

WebAssembly 的 官方介紹 是這樣的:WebAssembly(縮寫為 Wasm)是一種為基于堆棧的虛擬機(jī)設(shè)計(jì)的指令格式。它被設(shè)計(jì)為 C/C++/Rust 等高級(jí)編程語言的可移植目標(biāo),可在 web 上部署客戶端和服務(wù)端應(yīng)用程序。

從上面一段話我們可以得出幾個(gè)信息:

  • Wasm 是一種可執(zhí)行的指令格式。
  • C/C++/Rust 等高級(jí)語言寫的程序可以編譯成 Wasm。
  • Wasm 可以在 web(瀏覽器)環(huán)境中運(yùn)行。
  • 可執(zhí)行指令格式

    看到上面的三個(gè)信息我們可能又有疑問:什么是指令格式?

    我們常見的 ELF 文件 就是 Unix 系統(tǒng)上最常用的二進(jìn)制指令格式,它被 loader 解析識(shí)別,加載進(jìn)內(nèi)存執(zhí)行。同理,Wasm 也是被某種實(shí)現(xiàn)了 Wasm 的 runtime 識(shí)別,加載進(jìn)內(nèi)存執(zhí)行,目前常見的實(shí)現(xiàn)了 Wasm runtime 的工具有各種主流瀏覽器,nodejs,以及一個(gè)專門為 Wasm 設(shè)計(jì)的通用實(shí)現(xiàn):Wasmer,甚至還有人給 Linux 內(nèi)核提 feature 將 Wasm runtime 集成在內(nèi)核中,這樣用戶寫的程序可以很方便的跑在內(nèi)核態(tài)。

    各種主流瀏覽器對(duì) WebAssembly 的支持程度:

    圖 1 主流瀏覽器對(duì) WebAssembly 的支持程度

    從高級(jí)語言到 Wasm

    有了上面的背景就不難理解高級(jí)語言是如何編譯成 Wasm 的,看一下高級(jí)語言的編譯流程:

    圖 2 高級(jí)語言編譯流程

    我們知道高級(jí)編程語言的特性之一就是可移植性,例如 C/C++ 既可以編譯成 x86 機(jī)器可運(yùn)行的格式,也可以編譯到 ARM 上面跑,而我們的 Wasm 運(yùn)行時(shí)和 ARM,x86_32 其實(shí)是同類東西,可以認(rèn)為它是一臺(tái)虛擬的機(jī)器,支持執(zhí)行某種字節(jié)碼,這一點(diǎn)其實(shí)和 Java 非常像,實(shí)際上 C/C++ 也可以編譯到 JVM 上運(yùn)行(參考:compiling-c-for-the-jvm)。

    各種 runtime 以及 WASI

    再啰嗦一下各種環(huán)境中運(yùn)行 Wasm 的事,上面說了 Wasm 是設(shè)計(jì)為可以在 web 中運(yùn)行的程序,其實(shí) Wasm 最初設(shè)計(jì)是為了彌補(bǔ) js 執(zhí)行效率的問題,但是發(fā)展到后面發(fā)現(xiàn),這玩意兒當(dāng)虛擬機(jī)來移植各種程序也是很贊的,于是有了 nodejs 環(huán)境,Wasmer 環(huán)境,甚至還有內(nèi)核環(huán)境。

    這么多環(huán)境就有一個(gè)問題了:各個(gè)環(huán)境支持的接口不一致。比如 nodejs 支持讀寫文件,但瀏覽器不支持,這挑戰(zhàn)了 Wasm 的可移植性,于是 WASI (WebAssembly System Interface) 應(yīng)運(yùn)而生,它定義了一套底層接口規(guī)范,只要編譯器和 Wasm 運(yùn)行環(huán)境都支持這套規(guī)范,那么編譯器生成的 Wasm 就可以在各種環(huán)境中無縫移植。如果用現(xiàn)有的概念來類比,Wasm runtime 相當(dāng)于一臺(tái)虛擬的機(jī)器,Wasm 就是這臺(tái)機(jī)器的可執(zhí)行程序,而 WASI 是運(yùn)行在這臺(tái)機(jī)器上的系統(tǒng),它為 Wasm 提供底層接口(如文件操作,socket 等)。

    Example or Hello World?

    程序員對(duì) Hello World 有天生的好感,為了更好的說明 Wasm 和 WASI 是啥,我們這里用一個(gè) Wasm 的 Hello World 來介紹(例程來源:chai2010-golang-wasm.slide#27):

    (module;; type iov struct { iov_base, iov_len int32 };; func fd_write(id *iov, iovs_len int32, nwritten *int32) (written int32)(import "wasi_unstable" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32)))(memory 1)(export "memory" (memory 0));; The first 8 bytes are reserved for the iov array, starting with address 8(data (i32.const 8) "hello worldn");; _start is similar to main function, will be executed automatically(func $main (export "_start")(i32.store (i32.const 0) (i32.const 8)) ;; iov.iov_base - The string address is 8(i32.store (i32.const 4) (i32.const 12)) ;; iov.iov_len - String length(call $fd_write(i32.const 1) ;; 1 is stdout(i32.const 0) ;; *iovs - The first 8 bytes are reserved for the iov array(i32.const 1) ;; len(iovs) - Only 1 string(i32.const 20) ;; nwritten - Pointer, inside is the length of the data to be written)drop ;; Ignore return value) )

    具體指令的解釋可以參考 這里。

    這里的 test.wat 是 Wasm 的文本表示,wat 之于 Wasm 的關(guān)系類似于匯編和 ELF 的關(guān)系。

    然后我們把 wat 編譯為 Wasm 并且使用 Wasmer(一個(gè)通用的 Wasm 運(yùn)行時(shí)實(shí)現(xiàn))運(yùn)行:

    圖 3 Hello World

    改造工作

    恐懼來自未知,有了背景知識(shí)動(dòng)起手來才無所畏懼,現(xiàn)在可以開啟 TiDB 的瀏覽器之旅。

    瀏覽器安全限制

    我們知道,瀏覽器本質(zhì)是一個(gè)沙盒,是不會(huì)讓內(nèi)部的程序做一些危險(xiǎn)的事情的,比如監(jiān)聽端口,讀寫文件。而 TiDB 的使用場(chǎng)景實(shí)際是用戶啟動(dòng)一個(gè)客戶端通過 MySQL 協(xié)議連接到 TiDB,這要求 TiDB 必須監(jiān)聽某個(gè)端口。

    考慮片刻之后,我們認(rèn)為即便克服了瀏覽器沙盒這個(gè)障礙,真讓用戶用 MySQL 客戶端去連瀏覽器也并不是一個(gè)優(yōu)雅的事情,我們希望的是用戶在頁(yè)面上可以有一個(gè)開箱即用的 MySQL 終端,它已經(jīng)連接好了 TiDB。

    于是我們第一件事是給 TiDB 集成一個(gè)終端,讓它啟動(dòng)后直接彈出這個(gè)終端接受用戶輸入 SQL。所以我們需要在 TiDB 的代碼中找到一個(gè)工具,它的輸入是一串 SQL,輸出是 SQL 的執(zhí)行結(jié)果,寫一個(gè)這樣的東西對(duì)于我們幾個(gè)沒接觸過 TiDB 代碼的人來說還是有些難度,于是我們想到了一個(gè)捷徑:TiDB 的測(cè)試代碼中肯定會(huì)有輸入 SQL 然后檢查輸出的測(cè)試。那么把這種測(cè)試搬過來改一改不就是我們想要的東西嘛?然后我們翻了翻 TiDB 的測(cè)試代碼,發(fā)現(xiàn)了大量的這樣的用法:

    result = tk.MustQuery("select count(*) from t group by d order by c") result.Check(testkit.Rows("3", "2", "2"))

    所以我們只需要看看這個(gè) tk 是個(gè)什么東西,借來用一下就行了。這是 tk 的主要函數(shù):

    // Exec executes a sql statement. func (tk *TestKit) Exec(sql string, args ...interface{}) (sqlexec.RecordSet, error) {var err errorif tk.Se == nil {tk.Se, err = session.CreateSession4Test(tk.store)tk.c.Assert(err, check.IsNil)id := atomic.AddUint64(&connectionID, 1)tk.Se.SetConnectionID(id)}ctx := context.Background()if len(args) == 0 {var rss []sqlexec.RecordSetrss, err = tk.Se.Execute(ctx, sql)if err == nil && len(rss) > 0 {return rss[0], nil}return nil, errors.Trace(err)}stmtID, _, _, err := tk.Se.PrepareStmt(sql)if err != nil {return nil, errors.Trace(err)}params := make([]types.Datum, len(args))for i := 0; i < len(params); i++ {params[i] = types.NewDatum(args[i])}rs, err := tk.Se.ExecutePreparedStmt(ctx, stmtID, params)if err != nil {return nil, errors.Trace(err)}err = tk.Se.DropPreparedStmt(stmtID)if err != nil {return nil, errors.Trace(err)}return rs, nil }

    剩下的事情就非常簡(jiǎn)單了,寫一個(gè) Read-Eval-Print-Loop (REPL) 讀取用戶輸入,將輸入交給上面的 Exec,再將 Exec 的輸出格式化到標(biāo)準(zhǔn)輸出,然后循環(huán)繼續(xù)讀取用戶輸入。

    編譯問題

    集成一個(gè)終端只是邁出了第一步,我們現(xiàn)在需要驗(yàn)證一個(gè)非常關(guān)鍵的問題:TiDB 能不能編譯到 Wasm,雖然 TiDB 是 Golang 寫的,但是中間引用的第三方庫(kù)沒準(zhǔn)哪個(gè)寫了平臺(tái)相關(guān)的代碼就沒法直接編譯了。

    我們先按照 Golang 官方文檔 編譯:

    圖 4 按照 Golang 官方文檔編譯(1/2)

    果然出師不利,查看 goleveldb 的代碼發(fā)現(xiàn),storage 包下面的代碼針對(duì)不同平臺(tái)有各自的實(shí)現(xiàn),唯獨(dú)沒有 Wasm/js 的:

    圖 5 按照 Golang 官方文檔編譯(2/2)

    所以在 Wasm/js 環(huán)境下編譯找不到一些函數(shù)。所以這里的方案就是添加一個(gè) file_storage_js.go,然后給這些函數(shù)一個(gè) unimplemented 的實(shí)現(xiàn):

    package storageimport ("os""syscall" )func newFileLock(path string, readOnly bool) (fl fileLock, err error) {return nil, syscall.ENOTSUP }func setFileLock(f *os.File, readOnly, lock bool) error {return syscall.ENOTSUP }func rename(oldpath, newpath string) error {return syscall.ENOTSUP }func isErrInvalid(err error) bool {return false }func syncDir(name string) error {return syscall.ENOTSUP }

    然后再次編譯:

    圖 6 再次編譯的結(jié)果

    emm… 編譯的時(shí)候沒有函數(shù)可以說這個(gè)函數(shù)沒有 Wasm/js 對(duì)應(yīng)的版本,沒有 body 是個(gè)什么情況?好在我們有代碼可以看,到 arith_decl.go 所在的目錄看一下就知道怎么回事了:

    圖 7 查看目錄

    然后 arith_decl.go 的內(nèi)容是一些列的函數(shù)聲明,但是具體的實(shí)現(xiàn)放到了上面的各個(gè)平臺(tái)相關(guān)的匯編文件中了。

    看起來還是和剛剛一樣的情況,我們只需要為 Wasm 實(shí)現(xiàn)一套這些函數(shù)就可以了。但這里有個(gè)問題是,這是一個(gè)代碼不受我們控制的第三方庫(kù),并且 TiDB 不直接依賴這個(gè)庫(kù),而是依賴了一個(gè)叫 mathutil 的庫(kù),然后 mathutil 依賴這個(gè) bigfft。悲催的是,這個(gè) mathutil 的代碼也不受我們控制,因此很直觀的想到了兩種方案:

  • 給這兩個(gè)庫(kù)的作者提 PR,讓他們支持 Wasm。
  • 我們將這兩個(gè)庫(kù) clone 過來改掉,然后把 TiDB 依賴改到我們 clone 過來的庫(kù)上。
  • 方案一的問題很明顯,整個(gè)周期較長(zhǎng),等作者接受 PR 了我們的 Hackathon 都涼涼了(而且還不一定會(huì)接受);方案二的問題也不小,這會(huì)導(dǎo)致我們和上游脫鉤。那么有沒有第三種方案呢,即在編譯 Wasm 的時(shí)候不依賴這兩個(gè)庫(kù),在編譯正常的二進(jìn)制文件的時(shí)候又用這兩個(gè)庫(kù)?經(jīng)過搜索發(fā)現(xiàn),我們很多代碼都用到了 mathutil,但是基本上只用了幾個(gè)函數(shù):MinUint64,MaxUint64,MinInt32,MaxInt32 等等,我們想到的方案是:

  • 新建一個(gè) mathutil 目錄,在這個(gè)目錄里建立 mathutil_linux.go 和 mathutil_js.go。
  • 在 mathutil_linux.go 中 reexport 第三方包的幾個(gè)函數(shù)。
  • 在 mathutil_js.go 中自己實(shí)現(xiàn)這幾個(gè)函數(shù),不依賴第三方包。
  • 將所有對(duì)第三方的依賴改到 mathutil 目錄上。
  • 這樣,mathutil 目錄對(duì)外提供了原來 mathutil 包的函數(shù),同時(shí)整個(gè)項(xiàng)目只有 mathutil 目錄引入了這個(gè)不兼容 Wasm 的第三方包,并且只在 mathutil_linux.go 中引入(mathutil_js.go 是自己實(shí)現(xiàn)的),因此編譯 Wasm 的時(shí)候就不會(huì)再用到 mathutil 這個(gè)包。

    再次編譯,成功了!

    圖 8 編譯成功

    兼容性問題

    編譯出 main.Wasm 按照 Golang 的 Wasm 文檔跑一下,由于目前是直接通過 os.Stdin 讀用戶輸入的 SQL,通過 os.Stdout 輸出結(jié)果,所以理論上頁(yè)面上會(huì)是空白的(我們還沒有操作 dom),但是由于 TiDB 的日志會(huì)打向 os.Stdout,所以在瀏覽器的控制臺(tái)上應(yīng)該能看到 TiDB 正常啟動(dòng)的日志才對(duì)。然而很遺憾看到的是異常棧:

    圖 9 異常棧

    可以看到這個(gè)錯(cuò)是運(yùn)行時(shí)沒實(shí)現(xiàn) os.stat 操作,這是因?yàn)槟壳暗?Golang 沒有很好的支持 WASI,它僅在 wasm_exec.js 中 mock 了一個(gè) fs:

    global.fs = {writeSync(fd, buf) {...},write(fd, buf, offset, length, position, callback) {...},open(path, flags, mode, callback) {...},... }

    而且這個(gè) mock 的 fs 并沒有實(shí)現(xiàn) stat, lstat, unlink, mkdir 之類的調(diào)用,那么解決方案就是我們?cè)趩?dòng)之前在全局的 fs 對(duì)象上 mock 一下這幾個(gè)函數(shù):

    function unimplemented(callback) {const err = new Error("not implemented");err.code = "ENOSYS";callback(err); } function unimplemented1(_1, callback) { unimplemented(callback); } function unimplemented2(_1, _2, callback) { unimplemented(callback); }fs.stat = unimplemented1; fs.lstat = unimplemented1; fs.unlink = unimplemented1; fs.rmdir = unimplemented1; fs.mkdir = unimplemented2; go.run(result.instance);

    然后再刷新頁(yè)面,在控制臺(tái)上出現(xiàn)了久違的日志:

    圖 10 日志信息

    到目前為止就已經(jīng)解決了 TiDB 編譯到 Wasm 的所有技術(shù)問題,剩下的工作就是找一個(gè)合適的能運(yùn)行在瀏覽器里的 SQL 終端替換掉前面寫的終端,和 TiDB 對(duì)接上就能讓用戶在頁(yè)面上輸入 SQL 并運(yùn)行起來了。

    用戶接口

    通過上面的工作,我們現(xiàn)在有了一個(gè) Exec 函數(shù),它接受 SQL 字符串,輸出 SQL 執(zhí)行結(jié)果,并且它可以在瀏覽器里運(yùn)行,我們還需要一個(gè)瀏覽器版本 SQL 終端和這個(gè)函數(shù)交互,兩種方案:

  • 使用 Golang 直接操作 dom 來實(shí)現(xiàn)這個(gè)終端。
  • 在 Golang 中把 Exec 暴露到全局,然后找一個(gè)現(xiàn)成的 js 版本的終端和這個(gè)全局的 Exec 對(duì)接。
  • 對(duì)于前端小白的我們來說,第二種方式成本最低,我們很快找到了 jquery.console.js 這個(gè)庫(kù),它只需要傳入一個(gè) SQL 處理的 callback 即可運(yùn)行,而我們的 Exec 簡(jiǎn)直就是為這個(gè) callback 量身打造的。

    因此我們第一步工作就是把 Exec 掛到瀏覽器的 window 上(暴露到全局給 js 調(diào)用):

    js.Global().Set("executeSQL", js.FuncOf(func(this js.Value, args []js.Value) interface{} {go func() {// Simplified codesql := args[0].String()args[1].Invoke(k.Exec(sql))}()return nil }))

    這樣就能在瀏覽器的控制臺(tái)運(yùn)行 SQL 了:

    圖 11 在瀏覽器控制臺(tái)運(yùn)行 SQL

    然后將用 jquery.console.js 搭建一個(gè) SQL 終端,再將 executeSQL 作為 callback 傳入,大功告成:

    圖 12 搭建 SQL 終端

    現(xiàn)在算是有一個(gè)能運(yùn)行的版本了。

    本地文件訪問

    還有一點(diǎn)點(diǎn)小麻煩要解決,那就是 TiDB 的 load stats 和 load data 功能。load data 語法和功能詳解可以參考 TiDB 官方文檔,其功能簡(jiǎn)單的說就是用戶指定一個(gè)文件路徑,然后客戶端將這個(gè)文件內(nèi)容傳給 TiDB,TiDB 將其加載到指定的表里。我們的問題在于,瀏覽器中是不能讀取用戶電腦上的文件的,于是我們只好在用戶執(zhí)行這個(gè)語句的時(shí)候打開瀏覽器的文件上傳窗口,讓用戶主動(dòng)選擇一個(gè)這樣的文件傳給 TiDB:

    js.Global().Get("upload").Invoke(js.FuncOf(func(this js.Value, args []js.Value) interface{} {go func() {fileContent := args[0].String()_, e := doSomething(fileContent)c <- e}()return nil }), js.FuncOf(func(this js.Value, args []js.Value) interface{} {go func() {c <- errors.New(args[0].String())}()return nil }))

    load stats 的實(shí)現(xiàn)也是同理。

    此外,我們還使用同樣的原理 “自作主張” 加入了一個(gè)新的指令:source,用戶執(zhí)行這個(gè)命令可以上傳一個(gè) SQL 文件,然后我們會(huì)執(zhí)行這個(gè)文件里的語句。我們認(rèn)為這個(gè)功能的主要使用場(chǎng)景是:用戶初次接觸 TiDB 時(shí),想驗(yàn)證其對(duì) MySQL 的兼容性,但是一條一條輸入 SQL 效率太低了,于是可以將所有用戶業(yè)務(wù)中用到的 SQL 組織到一個(gè) SQL 文件中(使用腳本或其他自動(dòng)化工具),然后在頁(yè)面上執(zhí)行 source 導(dǎo)入這個(gè)文件,驗(yàn)證結(jié)果。

    以一個(gè) test.sql 文件為例,展示下 source 命令的效果,test.sql 文件內(nèi)容如下:

    CREATE DATABASE IF NOT EXISTS samp_db;USE samp_db;CREATE TABLE IF NOT EXISTS person (number INT(11),name VARCHAR(255),birthday DATE );CREATE INDEX person_num ON person (number);INSERT INTO person VALUES("1","tom","20170912");UPDATE person SET birthday='20171010' WHERE name='tom';

    source 命令執(zhí)行之后彈出文件選擇框:

    圖 13 source 命令執(zhí)行(1/2)

    選中 SQL 文件上傳后自動(dòng)執(zhí)行,可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的修改:

    圖 14 source 命令執(zhí)行(2/2)

    總結(jié)與展望

    總的來說,這次 Hackathon 為了移植 TiDB 我們主要解決了幾個(gè)問題:

  • 瀏覽器中無法監(jiān)聽端口,我們給 TiDB 嵌入了一個(gè) SQL 終端。
  • goleveldb 對(duì) Wasm 的兼容問題。
  • bigfft 的 Wasm 兼容問題。
  • Golang 自身對(duì) WASI 支持不完善導(dǎo)致的 fs 相關(guān)函數(shù)缺失。
  • TiDB 對(duì)本地文件加載轉(zhuǎn)換為瀏覽器上傳文件方式加載。
  • 支持 source 命令批量執(zhí)行 SQL。
  • 目前而言我們已經(jīng)將這個(gè)項(xiàng)目作為 TiDB Playground (https://play.pingcap.com/) 和 TiDB Tour (https://tour.pingcap.com/) 開放給用戶使用。由于它不需要用戶安裝配置就能讓用戶在閱讀文檔的同時(shí)進(jìn)行嘗試,很大程度上降低了用戶學(xué)習(xí)使用 TiDB 的成本,社區(qū)有小伙伴已經(jīng)基于這些自己做數(shù)據(jù)庫(kù)教程了,譬如:imiskolee/tidb-wasm-markdown(相關(guān)介紹文章)。

    圖 15 TiDB Playground

    由于 Hackathon 時(shí)間比較緊張,其實(shí)很多想做的東西還沒實(shí)現(xiàn),比如:

  • 使用 indexedDB 讓數(shù)據(jù)持久化:需要針對(duì) indexedDB 實(shí)現(xiàn)一套 Storage 的 interface。
  • 使用 P2P 技術(shù)(如 webrtc)對(duì)其他瀏覽器提供服務(wù):未來必定會(huì)有越來越多的應(yīng)用遷移到 Wasm,而很多應(yīng)用是需要數(shù)據(jù)庫(kù)的,TiDB-Wasm 恰好可以扮演這樣的角色。
  • 給 TiDB 的 Wasm 二進(jìn)制文件瘦身:目前編譯出來的二進(jìn)制文件有將近 80M,對(duì)瀏覽器不太友好,同時(shí)運(yùn)行時(shí)占用內(nèi)存也比較多。
  • 歡迎更多感興趣的社區(qū)小伙伴們加入進(jìn)來,一起在這個(gè)項(xiàng)目上愉快的玩耍(github.com/pingcap/tidb/projects/27),也可以通過 info@pingcap.com 聯(lián)系我們。

    閱讀原文:

    TiDB-Wasm 原理與實(shí)現(xiàn) | Hackathon 優(yōu)秀項(xiàng)目介紹 | PingCAP?pingcap.com

    總結(jié)

    以上是生活随笔為你收集整理的代码实现sql编译器_TiDB-Wasm 原理与实现 | Hackathon 优秀项目介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    国产成人福利在线 | 欧美性色黄 | 国产精品美女网站 | 天天综合精品 | 98超碰在线 | 久久一线 | 免费高清在线观看电视网站 | 在线三级中文 | 中文字幕第一页在线播放 | 国产高清不卡 | 亚洲精品国产精品久久99 | 91亚洲精品久久久蜜桃 | 天天操天天色天天射 | 免费亚洲视频在线观看 | 亚洲精品免费视频 | 韩国一区在线 | 国产韩国精品一区二区三区 | 黄色软件在线看 | 免费看的黄色的网站 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 在线观看精品一区 | 国产三级视频在线 | 中文字幕一区二区三区四区久久 | 日韩一区二区三区不卡 | 91最新中文字幕 | 国内精品亚洲 | 欧美日韩中文字幕视频 | 色在线国产 | 国产福利电影网址 | 天天拍天天草 | 狠狠色伊人亚洲综合网站野外 | 在线观看久草 | 日韩精品亚洲专区在线观看 | 久久综合九色综合久久久精品综合 | 一区二区成人国产精品 | 亚洲精品色视频 | 久久精品三级 | 久久久穴 | 免费黄色在线播放 | 久草视频在 | 国产视频一区二区在线播放 | 九九色视频 | 亚州欧美精品 | 国产亚洲日 | 国产精品99久久久久久人免费 | 中文字幕在线观看亚洲 | 久久久久久久久免费视频 | 欧美a影视| 国产 欧美 在线 | 九九热久久久 | 亚洲国产中文字幕 | 天天天天综合 | 国产福利91精品 | 国内久久精品 | 综合久久2023 | 国产精品xxxx18a99 | 在线视频黄 | 婷婷激情五月 | 美女视频黄免费 | 99久久久久 | 亚洲免费公开视频 | 免费成人av在线 | 精品日韩视频 | 欧美一级久久久 | 超碰成人av | 欧美一级艳片视频免费观看 | 黄色.com | 国产一区二区久久精品 | 亚洲年轻女教师毛茸茸 | 午夜精品久久久久久久99婷婷 | 精品九九九 | 99精品一级欧美片免费播放 | 国产精品久久在线 | 天天综合狠狠精品 | 首页国产精品 | 99视频在线观看免费 | 丁香婷婷激情国产高清秒播 | 国产精品久久一区二区三区不卡 | 久久久久久久影视 | 超碰97中文 | 91精品国产电影 | 国产麻豆精品传媒av国产下载 | 99se视频在线观看 | 久久久福利 | 国产视频首页 | 精品国偷自产在线 | 99视频播放| 国内少妇自拍视频一区 | 国产精品麻豆果冻传媒在线播放 | av福利资源| 超碰在线网| 久久久网 | 国产精品免费观看久久 | 国产一区二区三区久久久 | 天天操天天射天天插 | 蜜臀av性久久久久av蜜臀妖精 | 国产成人在线看 | 国产精品ⅴa有声小说 | 亚洲欧美少妇 | 成年人app网址 | 日韩91av | 久久精品8| 久久成人欧美 | 国产精国产精品 | 成人在线中文字幕 | 美女亚洲精品 | 精品国产99国产精品 | 深爱五月激情五月 | 国产福利一区二区三区在线观看 | 亚洲天堂视频在线 | 久久精品艹 | 国内精品久久久久久久影视简单 | 97免费| 正在播放亚洲精品 | 国产区网址 | 伊人婷婷激情 | 日韩成人在线免费观看 | 色综合五月天 | 天天爱天天操天天射 | 在线免费观看一区二区三区 | 午夜视频久久久 | 国产 日韩 欧美 自拍 | 又黄又爽又色无遮挡免费 | 国产在线传媒 | 色5月婷婷 | 国产精品久久 | 日韩精品欧美精品 | 天天爱综合 | 国产黄色资源 | 在线观看亚洲国产 | 欧美韩日精品 | 久久国精品 | 亚洲天天综合网 | 亚洲国产精久久久久久久 | 日日干夜夜干 | 久久人人爽人人爽人人片av免费 | 国产精品毛片一区二区在线 | 亚洲综合在线视频 | 欧洲色综合| 激情欧美xxxx | 国产午夜免费视频 | 五月开心激情网 | 九九九在线观看视频 | 香蕉视频4aa| 日韩精品国产一区 | 丰满少妇一级 | 成人国产网站 | 超碰在线观看99 | 国产自偷自拍 | 日韩欧美亚州 | 9999亚洲| 97视频亚洲 | 99日韩精品| 国产精品人成电影在线观看 | 欧美精品在线观看一区 | 手机看片| 成人国产电影在线观看 | 欧美粗又大 | 激情网五月婷婷 | 黄色成人在线观看 | 中文国产在线观看 | avcom在线 | 精品综合久久久 | 亚洲精品国偷自产在线99热 | 亚洲少妇激情 | 91久草视频 | 亚洲男男gaygay无套 | 国产欧美日韩视频 | 久久黄页 | 日本久久成人中文字幕电影 | 成人免费电影 | 成人在线播放视频 | 欧美一区二区三区在线 | 中文字幕三区 | www.干| 66av99精品福利视频在线 | 一区二区三区四区久久 | www.五月婷婷.com | 日狠狠 | 欧美日韩不卡一区 | 久久久久久中文字幕 | 日本视频精品 | 最近高清中文字幕在线国语5 | 91精品国产成人观看 | 国产视频亚洲 | 激情五月开心 | 亚洲综合色丁香婷婷六月图片 | 成人免费观看av | 免费成视频 | 久草在线中文888 | 久久免费的精品国产v∧ | 久久精品久久精品久久精品 | 456免费视频| 国产精品va在线观看入 | 国产精品精品久久久久久 | 精品久久久久久久 | 国产一级片在线播放 | 黄色www在线观看 | a特级毛片 | 久久国产欧美日韩精品 | 久久精品国产免费观看 | 久草在线最新视频 | 国产精品视频免费 | 国产福利免费看 | 免费黄色网址大全 | 国产成人精品免费在线观看 | 久久久亚洲电影 | 日韩精品一区二 | 日韩精品一区二区不卡 | 在线日本v二区不卡 | 96精品高清视频在线观看软件特色 | 日韩电影在线观看一区 | 丝袜美腿一区 | 天天夜夜亚洲 | 一区二区三区四区影院 | 最新日本中文字幕 | 国产一区二区三区视频在线 | 亚洲综合婷婷 | 国产欧美三级 | 久久婷婷国产色一区二区三区 | 很黄很污的视频网站 | 夜夜高潮夜夜爽国产伦精品 | 热久久精品在线 | 韩国精品在线观看 | 超碰在线97免费 | 天天综合网 天天综合色 | 久久久亚洲国产精品麻豆综合天堂 | 最新中文字幕在线观看视频 | 亚洲综合视频在线 | 国产小视频在线播放 | 国产精品久久久久一区二区 | 国产视频网站在线观看 | 国产一级黄大片 | 国产中文字幕在线免费观看 | 欧美黄污视频 | av在线播放亚洲 | 最新99热 | 91九色蝌蚪国产 | 中文字幕91 | 亚洲日本三级 | 婷婷久久五月天 | 日韩免费av在线 | 91麻豆免费看 | 色婷婷啪啪免费在线电影观看 | 青青河边草观看完整版高清 | 青春草视频 | 99tvdz@gmail.com | 国产日产av | 91理论电影 | 色综合久久88色综合天天6 | 亚洲免费国产视频 | 91视频久久久久 | 99精品久久精品一区二区 | 国产精品毛片一区二区三区 | 99免费在线| 91麻豆精品国产午夜天堂 | 国产亚洲成av片在线观看 | 日韩视频免费观看高清完整版在线 | 久久精品久久久久久久 | 国产一区二区在线视频观看 | 亚洲视频久久 | 国产日韩精品在线观看 | 国产精品一区二区三区在线免费观看 | 在线超碰av | 女人18精品一区二区三区 | 嫩草av影院| 免费中文字幕视频 | 亚洲人在线 | 免费在线国产 | 日韩免费在线一区 | 久草资源免费 | 国产精品第7页 | 欧美精品乱码久久久久 | 激情综合久久 | 免费a网站 | 久久免费黄色网址 | 欧美成人中文字幕 | 亚洲国产高清在线 | 日韩免费三区 | 99视频在线免费播放 | 久久97久久97精品免视看 | 国产福利一区二区在线 | 国产美女精品在线 | 992tv在线成人免费观看 | 国产免费专区 | 激情久久伊人 | 国产精品久久久一区二区三区网站 | 日韩天堂在线观看 | 国产精品自产拍在线观看中文 | 在线影院 国内精品 | 91一区二区三区在线观看 | 精品特级毛片 | 久久国产成人午夜av影院潦草 | 午夜精品久久久久久久99无限制 | 国产一区视频在线播放 | 在线视频欧美亚洲 | 亚洲精品综合在线 | 天天操天天摸天天干 | 91免费高清视频 | 97视频人人免费看 | 免费午夜在线视频 | 国产精彩在线视频 | 日韩欧美专区 | 在线播放视频一区 | 色婷婷色| 天天色天天色 | 精品久久久久久久久久久久 | 国产成人精品在线 | 四虎国产精品成人免费4hu | 人人射人人澡 | 西西大胆啪啪 | 国内少妇自拍视频一区 | 在线观看免费黄色 | 成人影片免费 | 欧美福利在线播放 | 国产精彩视频一区二区 | 五月天天色 | 97高清视频| 在线观看韩日电影免费 | 夜夜爱av| 欧美日韩国产在线 | 91av视频免费观看 | 国产精品一区二区视频 | 久久草在线精品 | 人人干人人搞 | 日韩久久一区二区 | 国产高清视频在线播放一区 | 国产成人久久精品 | 一区二区三区四区在线免费观看 | 四虎伊人 | 国产精品美女久久久久久久 | 日韩高清dvd | 97色资源 | www视频免费在线观看 | 免费网站观看www在线观看 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 日韩精品一区二区在线视频 | 成人cosplay福利网站 | 日本高清免费中文字幕 | 精品国产伦一区二区三区观看方式 | 欧美精品被 | 精品91在线 | 亚洲欧美成人在线 | 亚洲成色| 亚洲视频六区 | 999久久| 一区二区三区在线影院 | 天天干,天天操,天天射 | 色姑娘综合天天 | 国产精品s色 | 国产精品久久久久久久久久久久午夜 | 美女国产精品 | 91精品视频免费观看 | 欧美a级免费视频 | 欧美成人精品欧美一级乱 | 91超碰免费在线 | 一级欧美黄 | 中文字幕在线视频国产 | 96亚洲精品久久 | 美女久久网站 | 99精品免费久久久久久久久日本 | 丝袜精品视频 | 97免费| 午夜在线国产 | www.天天操 | 国产日产高清dvd碟片 | 五月婷婷开心 | 成人福利av | 国产高清亚洲 | 欧美日韩不卡在线观看 | 在线观看成人一级片 | 欧美日韩一区三区 | 美女视频一区 | 丁香激情婷婷 | 在线观看aaa | 日日综合网 | 中文字幕在线观看2018 | 精品国产欧美 | 成人试看120秒 | 香蕉视频在线免费看 | 黄色小说在线免费观看 | 日韩在线视频看看 | 免费三级网 | 国产经典av| 99r在线视频 | 午夜美女福利 | av天天在线观看 | 色综合久久88色综合天天免费 | 中文字幕黄色网 | 久久视频免费看 | 99热99| wwwwww色| 国产成人精品一区二区三区在线 | 东方av免费在线观看 | 91中文视频 | 久久经典视频 | a视频在线观看免费 | 欧美另类网站 | 国产又粗又猛又黄又爽 | 久久久精品小视频 | 久久久综合香蕉尹人综合网 | 亚洲天堂自拍视频 | 操操操av | 欧美色图p | 欧美综合在线观看 | 国产一区二区三区四区在线 | 国产视频日韩视频欧美视频 | 日韩在线观看视频免费 | 国产h在线播放 | 午夜男人影院 | 久久精品牌麻豆国产大山 | 久久99精品国产麻豆宅宅 | 国产免费视频一区二区裸体 | 亚洲人成人99网站 | 一个色综合网站 | 超碰在线9 | 欧美成人一区二区 | 91三级在线观看 | 国产成人久 | 99这里只有精品99 | 主播av在线 | 天天射狠狠干 | 9ⅰ精品久久久久久久久中文字幕 | 日韩欧美一区二区三区免费观看 | 日本精品视频在线观看 | h久久| 日日综合 | 三级黄色欧美 | 最新日韩精品 | 免费h精品视频在线播放 | 免费在线观看av的网站 | 久章草在线观看 | 97色在线观看免费视频 | 九九热精| 精品毛片一区二区免费看 | 国产精品门事件 | 99精品视频精品精品视频 | 91亚洲视频在线观看 | 手机色站 | 国产黄色片免费看 | 草久在线视频 | 麻豆视频免费在线观看 | 精品产品国产在线不卡 | 看片一区二区三区 | 精品视频在线免费观看 | 婷婷狠狠操 | 91精品一区二区三区蜜臀 | 欧美日韩成人 | 日本最新高清不卡中文字幕 | 韩国av免费 | 亚洲视频免费 | 天天操一操 | 亚洲激情 欧美激情 | 国产精品成人免费精品自在线观看 | 伊人黄色网 | 91精品在线免费观看视频 | 欧美日韩精品电影 | 中文字幕视频在线播放 | 高清美女视频 | 日免费视频 | 国内久久久久久 | 中文字幕第一页在线 | 色视频网站在线 | 国产精品一区二区麻豆 | 久久精品久久精品久久39 | 天天色中文 | 久久久免费毛片 | 日韩高清免费电影 | 97视频免费观看 | 黄色在线观看免费 | av不卡免费在线观看 | 久久久精品日本 | 国产精品女主播一区二区三区 | 午夜精品一区二区三区在线播放 | 亚洲三级黄 | 亚洲免费婷婷 | 去干成人网 | 日韩一区在线免费观看 | 少妇精品久久久一区二区免费 | 天堂av在线| 国产精品久久一区二区无卡 | 丁香婷婷基地 | 国产精久久久 | 国产视频高清 | h动漫中文字幕 | 国产精品一区二区久久久久 | 精品v亚洲v欧美v高清v | 日韩1级片 | 久久在线精品视频 | 国产综合婷婷 | 日本精品久久 | 91网在线观看 | 99草在线视频 | 国产女v资源在线观看 | 日本性生活一级片 | 国产原创在线观看 | 成人国产精品免费 | 少妇视频在线播放 | 天天操天天操天天操天天操天天操天天操 | 久久a久久| 香蕉精品视频在线观看 | 国产高清免费在线观看 | 黄色aaa级片 | 欧美在线视频不卡 | 欧美婷婷综合 | 亚洲小视频在线观看 | 久久综合9988久久爱 | 天天操天天摸天天爽 | 久久久影院一区二区三区 | 91片黄在线观 | 丰满少妇在线观看网站 | 99产精品成人啪免费网站 | 久久国内视频 | 久久久久久久久爱 | 亚洲精品美女在线 | 免费在线播放av电影 | 国产不卡在线视频 | 91精品免费看 | 国产亚洲精品久久网站 | 国产一区二区电影在线观看 | 日韩av免费一区二区 | 天天舔夜夜操 | 日韩在线观看中文字幕 | 中文电影网 | 欧亚日韩精品一区二区在线 | 亚洲日韩中文字幕在线播放 | 91九色在线观看 | 超碰个人在线 | 欧美性极品xxxx做受 | 欧美日韩精品在线观看 | 国产精品成人一区二区三区吃奶 | 中文字幕一区二区三区在线观看 | 五月天久久久久久 | 亚洲精品视频网站在线观看 | 成人午夜网址 | 国内揄拍国内精品 | av免费电影在线观看 | 久久久久久久久久久电影 | 国产vs久久 | 99视频+国产日韩欧美 | 夜色资源站国产www在线视频 | 五月婷婷另类国产 | 中文字幕之中文字幕 | 美女视频黄网站 | 欧美成人手机版 | www日韩高清| 91精品亚洲影视在线观看 | 日韩色区| 91在线一区二区 | 国产在线看 | 亚洲成人一区 | 欧洲精品码一区二区三区免费看 | 高清免费在线视频 | www.99热精品 | 久久夜色电影 | 久久久久国产一区二区三区四区 | 永久免费毛片在线观看 | 免费在线观看的av网站 | 国产成人免费在线观看 | aaa免费毛片 | 国产精美视频 | 97色在线观看免费视频 | 日韩美视频 | 麻豆精品视频在线观看免费 | 国产精品 亚洲精品 | 国产色久 | 国产精品手机在线 | 亚洲视频电影在线 | 一区二区 久久 | 字幕网av | 日批网站免费观看 | 91精品播放 | 九九热re| 国产剧情av在线播放 | 最新av在线免费观看 | 精品一区二区三区香蕉蜜桃 | 黄网站免费久久 | 成人黄色电影在线播放 | 精品国产理论片 | 久久试看 | 一区二区高清在线 | 成片人卡1卡2卡3手机免费看 | 久久免费国产精品1 | 99久久国产免费,99久久国产免费大片 | 国产一级片免费观看 | 亚洲欧美国产视频 | 国产精品久久久一区二区三区网站 | 伊人久久国产 | 免费a级观看| 国产高清日韩欧美 | 国产一区 在线播放 | 9色在线视频 | 日韩区欠美精品av视频 | 亚洲欧美精品在线 | 日韩久久精品一区二区三区 | 97精品超碰一区二区三区 | 欧美日韩中 | 亚洲精品视频在线免费 | 粉嫩一二三区 | 久久99亚洲网美利坚合众国 | 日韩在线视频网址 | 伊人资源视频在线 | av解说在线 | 99在线高清视频在线播放 | av电影在线免费观看 | 91精选在线 | 中文字幕一区二区三区在线视频 | 久久精品一二三区白丝高潮 | 亚洲不卡av一区二区三区 | 黄网站www| 婷婷国产一区二区三区 | 黄网站免费大全入口 | 国产亚洲精品精品精品 | 国产精品久久久久久久久免费 | 欧美动漫一区二区三区 | 亚洲有 在线 | 黄色三级网站在线观看 | 麻豆国产在线视频 | 激情五月播播久久久精品 | 久久综合狠狠综合久久激情 | 麻花传媒mv免费观看 | 久久福利剧场 | 99久久99久久综合 | 91精品国产91久久久久福利 | 欧美a视频在线观看 | 激情网五月 | 国产精品永久免费观看 | 国产日韩精品视频 | 麻豆精品传媒视频 | 久久精品国产精品亚洲 | 色视频在线看 | 久久69av| 国产精品女 | 黄色亚洲在线 | 欧美色噜噜 | 久久免费a | 国产1区2区3区在线 亚洲自拍偷拍色图 | 三级在线国产 | 日韩激情视频在线观看 | 国产系列在线观看 | 在线观看免费一区 | 国产精品99精品 | 五月亚洲综合 | 久久精品91久久久久久再现 | 天堂av免费 | 久久精品电影 | 最近中文字幕在线播放 | av动图| 麻豆视频在线免费看 | 黄色一级免费 | 日韩网站在线看片你懂的 | 欧美日韩国产色综合一二三四 | 国产一及片 | 色国产精品 | 99在线观看精品 | 免费观看www小视频的软件 | 手机看片中文字幕 | 成人黄色电影在线播放 | 国产高清中文字幕 | 久久国产免费看 | 在线观看一区视频 | 久久黄色片子 | 国产成人精品三级 | 夜夜视频| 99免费国产 | 日本中文乱码卡一卡二新区 | 97电影网站 | 国产午夜在线观看 | 色偷偷88888欧美精品久久 | 三级黄免费看 | 91丨九色丨蝌蚪丰满 | 日韩av一区二区三区四区 | 国产高清视频免费 | 精品一二区 | 麻豆视频www | 成人免费在线观看电影 | 国产精品女同一区二区三区久久夜 | 9ⅰ精品久久久久久久久中文字幕 | 亚洲国产精品免费 | 精品国产电影一区 | www亚洲精品| 99视频在线看 | 91在线免费播放 | 香蕉网站在线观看 | 国产黄色资源 | 婷婷在线色 | 国产精品国产三级国产aⅴ无密码 | 精品国产一区二区三区久久 | 欧美日韩国产在线观看 | 亚洲 中文字幕av | 久久国产精品久久国产精品 | 在线免费性生活片 | 深夜免费福利在线 | 婷婷色网址 | 亚洲精品久久久久久久不卡四虎 | 色射爱 | 日韩电影一区二区三区 | 国产成人一二三 | 久草精品视频 | 在线国产片 | 99久久精品无码一区二区毛片 | 欧美另类成人 | 亚洲欧美日韩国产精品一区午夜 | 在线精品播放 | 国产三级av在线 | 国产精品岛国久久久久久久久红粉 | 国产999精品视频 | 色综合www | 国产亚洲精品成人av久久ww | av在线免费网站 | 欧美日韩久久久 | 午夜 久久 tv | 午夜电影中文字幕 | 最近免费观看的电影完整版 | 国产视频日韩视频欧美视频 | 97电影网手机版 | av女优中文字幕在线观看 | 97在线观看免费高清 | 国产成人777777 | 国产一卡二卡在线 | 天天综合网 天天综合色 | 国内成人综合 | 国产 中文 日韩 欧美 | 亚洲国产av精品毛片鲁大师 | 色香蕉网| 国产精品手机播放 | 在线观看亚洲电影 | 一区二区三区精品在线 | 黄色三级视频片 | 国产亚洲精品bv在线观看 | 亚洲激情视频在线观看 | 精品超碰| 波多野结衣一区 | 国产精品毛片一区二区在线 | 亚洲乱码在线 | 欧美午夜精品久久久久久浪潮 | 69av视频在线| 日韩中文在线观看 | 国产不卡在线观看视频 | 欧美日韩在线观看不卡 | 亚洲天天| 国产专区一 | 国产中的精品av小宝探花 | 天天操偷偷干 | 欧美日韩国产一二三区 | 欧美精品免费视频 | 亚洲国产日本 | 久久精品国产v日韩v亚洲 | 国内精品视频久久 | 久艹在线播放 | 亚洲成人av电影在线 | 伊人亚洲综合 | 精品女同一区二区三区在线观看 | 午夜丁香视频在线观看 | 天天操天天射天天舔 | 国产精品 视频 | 911精品美国片911久久久 | 国产成人av福利 | www免费黄色 | 人人射人人爱 | 人人狠 | 激情五月综合 | 欧洲精品视频一区 | 成人在线观看资源 | 中文字幕电影在线 | 久久精品精品电影网 | 久草在线在线视频 | 狠狠色伊人亚洲综合网站野外 | 久久综合久久综合久久综合 | av在线播放国产 | 成人国产精品免费观看 | 亚洲一区视频免费观看 | 日日摸日日添夜夜爽97 | 日韩在线视频二区 | 免费看成人a | 亚洲高清色综合 | 五月综合激情婷婷 | 国产一区在线精品 | 五月婷婷综合久久 | 精品婷婷 | 国产欧美高清 | 婷婷av网| 丁香导航| 91麻豆精品国产自产在线游戏 | www.亚洲激情.com | 午夜精品久久久久99热app | 亚洲国产精品视频 | 91av亚洲 | 91丨九色丨国产在线观看 | 香蕉久久国产 | 日韩在线一级 | 最新中文在线视频 | 91成人精品国产刺激国语对白 | 99精品在线免费在线观看 | 久草在线观看视频免费 | 久久福利影视 | 日韩羞羞| 欧美日视频 | 日本乱码在线 | 国产精品a成v人在线播放 | 国内精品久久久久影院优 | 日韩字幕 | 黄色免费网站 | 欧亚日韩精品一区二区在线 | 毛片网在线播放 | 久久综合给合久久狠狠色 | 国产精品12 | 午夜视频一区二区三区 | 黄色aaaaa | 色av色av色av| 日韩美女久久 | 草久视频在线观看 | 亚洲三级网站 | 中文字幕一区二区三区在线播放 | 日本成人免费在线观看 | 国产精品国产亚洲精品看不卡15 | 久久精品国产99国产 | 精品欧美一区二区精品久久 | 丁香婷婷综合色啪 | 精品国产精品国产偷麻豆 | 中文字幕 国产专区 | 久久久一本精品99久久精品 | 国产精品麻豆三级一区视频 | 久久久久久久久久福利 | 丁香花在线视频观看免费 | 伊人网av| 中文字幕在线播放日韩 | 久久久久国产精品免费免费搜索 | 亚洲精品国产第一综合99久久 | 亚洲国产精品999 | 日韩欧美视频免费看 | 国产亚洲成av片在线观看 | 97视频免费 | 中文字幕丰满人伦在线 | 亚洲国产精品视频在线观看 | 成人在线观看你懂的 | 五月天六月婷 | 中文字幕视频在线播放 | 国产1级毛片 | 国产69久久精品成人看 | 成人久久18免费网站图片 | 日韩在线色 | 视频在线观看一区 | 日韩精品一区二区三区免费观看 | 91精品国产高清自在线观看 | 中文字幕在线观看网址 | 韩日精品视频 | 中文在线天堂资源 | 天天操天天添天天吹 | 亚洲精品国产品国语在线 | 伊人久久电影网 | 亚洲欧洲xxxx| 丝袜美女在线观看 | av观看免费在线 | 亚洲视频axxx | 成人黄色在线看 | 久久综合久久综合久久 | 不卡的av | 久久久久久久久毛片精品 | 日韩av中文在线观看 | 日日操日日 | 日韩中字在线 | 亚洲欧美日韩在线一区二区 | 97在线看| 久久精品视频99 | 色偷偷88欧美精品久久久 | 欧美一区二区在线免费看 | 这里只有精品视频在线 | 伊人天堂网 | 国产理论在线 | 成人久久久久久久久久 | 国产玖玖在线 | 人人爽人人爽人人片 | 国产精品视频久久 | 日日干网址 | 96国产精品视频 | 国产97免费| 在线观看的av网站 | 在线国产视频观看 | 亚洲视频一区二区三区在线观看 | 欧美一级裸体视频 | 久久国内精品99久久6app | 天天干天天综合 | av成人在线网站 | 操操操日日 | 欧洲视频一区 | 97网在线观看 | 日韩成人精品一区二区三区 | 国产久草在线观看 | 亚州国产视频 | 国产精品一区二区三区在线 | 国产精品久久久久久久av电影 | 丁香电影小说免费视频观看 | 成人a级网站 | 国产一区二区免费 | 97超碰人人模人人人爽人人爱 | 国产小视频免费在线观看 | 欧美性大胆 | 亚洲日韩中文字幕在线播放 | 少妇av片 | 丝袜美女在线 | av激情五月 | 日日操夜夜操狠狠操 | 亚洲日日射 | 久草精品视频在线播放 | 99精品视频在线免费观看 | 日韩资源在线观看 | 日本黄色大片免费 | 国产麻豆精品久久一二三 | 日韩欧美在线影院 | 狠狠色伊人亚洲综合网站野外 | 久草视频在线看 | 国产精品久久嫩一区二区免费 | 最近中文字幕国语免费av | 91丨九色丨首页 | 中文字幕二区三区 | 欧美一区二视频在线免费观看 | 国产精品自产拍在线观看 | 久久久99国产精品免费 | 天天插天天狠天天透 | 日韩精品视频在线观看网址 | 麻豆视频国产精品 | 日韩在线视频线视频免费网站 | 日韩va欧美va亚洲va久久 | 日韩欧美视频在线观看免费 | 色诱亚洲精品久久久久久 | www在线观看视频 | 狠狠干成人 | 亚洲高清免费在线 | 欧美一级大片在线观看 | 亚洲男模gay裸体gay | 天天操天天谢 | 天天艹天天操 | 五月开心婷婷 | 日韩午夜精品 | 二区三区在线观看 | 国产高清日韩 | 日韩视频在线观看视频 | 久久久高清免费视频 | 91亚洲精品国产 | 色婷婷丁香 | 久久精品国产亚洲aⅴ | 国产精品二区三区 | 亚州精品视频 | 欧美激情综合五月色丁香小说 | 国内三级在线 | 黄色软件在线观看视频 | 国产精品毛片久久久久久久久久99999999 | 久久久在线 | 国产高清中文字幕 | 中文字幕 二区 | 91成人午夜 | 日韩国产精品毛片 | 亚洲开心色 | 99亚洲国产| 欧美午夜视频在线 | 日韩欧美高清一区二区 | 丁香花中文在线免费观看 | 伊人视频 | 色视频在线免费观看 | 中文字幕在线观看视频一区 | 久久婷婷一区二区三区 | 91在线91拍拍在线91 | 91网在线看 | 美女网站久久 | 欧美日韩在线免费观看视频 | 久久久久草| 国产女人40精品一区毛片视频 | 亚洲一区二区精品3399 | 黄色电影在线免费观看 | 国产不卡一 | 国产视频在线观看一区 | 精品国产视频一区 | 少妇视频在线播放 | 久久精品欧美日韩精品 | 精品国产乱码久久久久久1区二区 | 国产特级毛片 | 亚洲欧美日韩一二三区 | 成人中文字幕+乱码+中文字幕 | 天天插天天操天天干 | 中文字幕日韩一区二区三区不卡 | 911国产在线观看 | 国产精品久久久久久久毛片 | 欧美色图狠狠干 | 91在线精品播放 | 久久久综合九色合综国产精品 | 欧美精品午夜 | 久久www免费人成看片高清 | 国产一区在线视频播放 | 亚洲天堂精品视频在线观看 | 久久久国产99久久国产一 | 日韩专区中文字幕 | 日韩精品视频网站 | 久久草在线精品 | 成人宗合网 | 四虎视频 | 日日草夜夜操 | 日韩 在线观看 |