幽默:如何在靜態檔案託管伺服器上使用資料庫?
如何在靜態檔案託管伺服器上使用資料庫?首先,將SQLite(用C編寫)編譯為WebAssembly。SQLite可以使用emscripten進行編譯,而無需進行任何修改,並且sql.js庫是wasm程式碼周圍的薄JS包裝器。
sql.js只允許您建立和讀取完全位於記憶體中的資料庫-因此,我實現了一個虛擬檔案系統,當SQLite嘗試從檔案系統讀取時,該虛擬檔案系統使用HTTP Range請求獲取資料庫的塊:sql.js-httpvfs。從SQLite的角度來看,它看起來像是生活在具有空檔案系統的普通計算機上,但可以讀取/wdi.sqlite3檔案的空檔案系統。當然它不能寫入該檔案,但是隻讀資料庫仍然非常有用。
由於透過HTTP獲取資料的開銷非常大,因此我們需要分塊獲取資料,並在請求數量和使用的頻寬之間找到平衡。幸運的是,SQLite已經使用使用者定義的頁面大小(預設為4 KiB)將其資料庫組織在“ pages ”中。我已將此資料庫的頁面大小設定為1 KiB。
這是一個簡單的索引查詢查詢的示例:
select indicator_code, long_definition from wdi_series where indicator_name = 'Literacy rate, youth total (% of people ages 15-24)' |
執行上面的查詢,然後檢視頁面讀取日誌。SQLite對該查詢進行7頁讀取。
- 僅讀取三頁即可獲得一些架構資訊(這些資訊已被快取)
- 兩頁讀取是索引中的索引查詢 on wdi_series (indicator_name)
- wdi_series表資料上有兩次頁面讀取(第一次透過主鍵查詢行值,第二次從溢位頁面獲取文字資料)
索引以及表讀取都是B樹查詢。
好處:DOM作為資料庫
由於我們已經在瀏覽器中執行資料庫,為什麼不使用瀏覽器稱為dom虛擬表作為資料庫?
select count(*) as number_of_demos from dom where selector match '.content div.sqlite-httpvfs-demo'; select count(*) as sqlite_mentions from dom where selector match '.content p' and textContent like '%SQLite%'; |
我們甚至可以將元素直接插入DOM中:
insert into dom (parent, tagName, textContent) select 'ulouttable1', 'li', short_name from wdi_country where currency_unit = 'Euro' |
更新DOM中的元素:
update dom set textContent = get_flag("2-alpha_code") || ' ' || textContent from wdi_country where selector match 'ulouttable1 > li' and textContent = wdi_country.short_name |
當然,這裡的一切都是開源的。sqlite包裝器的主要實現是在sql.js-httpvfs中。該部落格文章的原始碼是pandoc markdown檔案,而演示是自定義的“圍欄fenced程式碼塊” React元件。
點選標題
相關文章
- 使用nginx快取伺服器上的靜態檔案Nginx快取伺服器
- 如何在 ? Space 上託管 Unity 遊戲Unity遊戲
- Serverless實踐-靜態網站託管Server網站
- Oracle 託管檔案Oracle
- Nginx下快取靜態檔案(如css js)Nginx快取CSSJS
- 靜態網站託管服務平臺網站
- 【YashanDB知識庫】ycm託管資料庫時,資料庫非OM安裝無法託管資料庫
- 你需要託管資料庫嗎?資料庫
- Django如何在專案中新增靜態資料夾Django
- 使用GitHub託管專案Github
- 如何使用Koa搭建靜態資原始檔伺服器伺服器
- 伺服器託管伺服器
- iOS打包.a靜態庫檔案(入門)iOS
- 前端靜態專案託管到github pages前端Github
- vue 靜態檔案上傳到七牛Vue
- Payso×OceanBase:雲上拓新,開啟雲資料庫的智慧託管資料庫
- 資料庫靜態脫敏資料庫
- 靜態庫和動態庫的製作以及Bundle資原始檔的使用
- 為什麼選擇免費檔案共享方法上的託管檔案傳輸
- 996.icu到955.holiday--使用Github託管靜態網站996Github網站
- 使用 Azure Blob Stoage 實現一個靜態檔案伺服器伺服器
- 自動共享和上傳檔案到相容的託管站點
- Sanic 靜態檔案
- C# 託管資源和非託管資源C#
- asp .net core 靜態檔案資源
- 怎樣在Github上託管開原始碼庫Github原始碼
- Node構建一個靜態檔案伺服器伺服器
- 將 Vue.js 專案部署至靜態網站託管,並開啟 Gzip 壓縮Vue.js網站
- 伺服器託管是什麼意思,為什麼要託管?伺服器
- 如何在nginx配置靜態資源Nginx
- nginx偽靜態檔案Nginx
- php生成靜態檔案PHP
- 如何在伺服器端接收上傳的檔案伺服器
- ASP .Net Core 中介軟體的使用(一):搭建靜態檔案伺服器/訪問指定檔案伺服器
- Nginx 靜態檔案伺服器搭建及autoindex模組解析Nginx伺服器Index
- Node手把手構建靜態檔案伺服器伺服器
- 01.Django學習之安裝,建立專案,傳參,MySQL資料庫,靜態檔案配置和模板的使用DjangoMySql資料庫
- Sqlserver資料庫使用 .bak 檔案還原資料庫SQLServer資料庫