中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

簡單分析sqlite4的一些設(shè)計(jì)改變
來源:易賢網(wǎng) 閱讀:99502 次 日期:2016-11-14 16:28:28
溫馨提示:易賢網(wǎng)小編為您整理了“簡單分析sqlite4的一些設(shè)計(jì)改變”,方便廣大網(wǎng)友查閱!
這篇文章主要介紹了sqlite4的一些設(shè)計(jì)改變,sqlite作為內(nèi)嵌式數(shù)據(jù)庫使用起來非常輕便,需要的朋友可以參考下
 

1.0 內(nèi)容提要

    sqlite4 是一個放在庫中的緊湊的,自包含的,零維護(hù)的的acid數(shù)據(jù)庫引擎, 像sqlite3一樣, 但具有改進(jìn)的接口和文件格式.

    運(yùn)行時(shí)環(huán)境封裝到了一個對象之中.

    使用了一個很不錯的鍵值對存儲引擎:

  •         一個獨(dú)立的大型鍵空間 - 不是sqlite3中那種每個表單獨(dú)的鍵空間和索引.
  •         按字典順序的鍵排序.
  •         多個存儲引擎,可在運(yùn)行時(shí)互換.
  •         默認(rèn)在磁盤上的存儲殷勤使用了一個日志結(jié)構(gòu)的合并數(shù)據(jù)庫.

    表的primary key真正被用作存儲引擎的鍵.

    可以使用小數(shù)點(diǎn)運(yùn)算.

    外鍵約束和遞歸觸發(fā)器默認(rèn)是啟用的.

    覆蓋指數(shù)可以顯示聲明.


2.0 概述

sqlite4 對于sqlite3而言,是一個可選方案,而不是一個替代方案. sqlite3 還沒有過時(shí). sqlite3 和 qlite4 將會并行受到支持. sqlite3 遺留的好處不會被拋棄.   sqlite3 還將會被持續(xù)的維護(hù)和改進(jìn). 但如果需要的話,新系統(tǒng)的設(shè)計(jì)者現(xiàn)在將可以選擇 sqlite4 而不是 sqlite3.

sqlite4 努力保持了sqlite3的最優(yōu)秀特性,同時(shí)在不破壞兼容性的前提下解決了sqlite3中無法修復(fù)的問題. sqlite3 和 sqlite4 中將會持續(xù)保持一樣的特性有:

  •     sqlite4 是放在一個庫中并鏈接到一個大型應(yīng)用程序的完整的,關(guān)系型,事務(wù)性的, acid, sql 數(shù)據(jù)庫引擎.  沒有服務(wù)器,i/o直接面向硬盤.
  •     sqlite4 的源代碼任何人可以用于任何目的.  沒有版權(quán)、發(fā)布或者公開源代碼或者編譯二進(jìn)制文件方面的的限制.  不用去擔(dān)心煩人的許可證.
  •     使用了動態(tài)類型,而不是大多數(shù)其它的sql數(shù)據(jù)庫引擎所使用的僵化的靜態(tài)類型.
  •     (默認(rèn))在磁盤上的鏡像是一個單獨(dú)的使用良好且穩(wěn)定文件格式的磁盤文件, 使得sqlite4庫適合于作為一個應(yīng)用程序的文件格式使用.
  •     sqlite4 將會是快速且可靠的,無需管理員操心它就能運(yùn)作的蠻好.
  •     sqlite4 的實(shí)現(xiàn)只有最簡化的依賴,因而它可以很容易的集成到嵌入式系統(tǒng)或者其它非常規(guī)的運(yùn)行時(shí)環(huán)境.

實(shí)現(xiàn)上仍然采用常用的匯編語言c。與sqlite3相比,sqlite4使用了更多c99特性,不過仍然可以使用常見的編譯器編譯。sqlite4使用了諸如size_t,int64_t,uint64_t以及其他標(biāo)準(zhǔn)數(shù)據(jù)類型。

sqlite4的編程接口與sqlite3的非常相似,只不過命名前綴都從sqlite3_更改為sqlite4_。sqlite3中舊的和作廢的接口已經(jīng)從sqlite4中剔除了。給一些函數(shù)增加了參數(shù),有時(shí)對參數(shù)稍作修改或者對其參數(shù)順序進(jìn)行重新排序。修改了某些接口名字,使其更加符合其功能。總體上來說,sqlite4的編程接口與sqlite3的非常相似,這樣移植一個sqlite3上的應(yīng)用到sqlite4上只需花一個小時(shí)或者兩個小時(shí)完成搜索替代就可以了。

sqlite3和sqlite4沒有共用任何符號,因此把sqlite3和sqlite4同時(shí)嵌入到同一進(jìn)程,同時(shí)使用它們都是可行的.

3.0 sqlite4的主要改變
3.1 運(yùn)行時(shí)對象

sqlite4中一些接口的第一個參數(shù)接收一個(新加的)指向一個sqlite4_env對象的指針,它定義了運(yùn)行時(shí)環(huán)境。需要接收sqlite4_env指針的示例程序包括:

  •     sqlite4_open()
  •     sqlite4_malloc(), sqlite4_realloc(), and     sqlite4_free()
  •     sqlite4_mprintf()
  •     sqlite4_random()
  •     sqlite4_config()

一個sqlite4_env對象實(shí)例定義了sqlite4與其他系統(tǒng)交互是如何交互的。一個sqlite4_env對象包含的方法能夠:

  •     分配,進(jìn)入,離開和收回互斥體
  •     分配,調(diào)整和釋放堆內(nèi)存,
  •     訪問和控制底層鍵/值存儲引擎,
  •     使用高質(zhì)量隨機(jī)種子初始化內(nèi)建prng,
  •     取得當(dāng)前時(shí)間和日期與本地時(shí)區(qū),
  •     記錄error日志消息.


標(biāo)準(zhǔn)平臺(windows和unix)的sqlite4構(gòu)建包含了一個全局sqlite4_env對象,通常這個對象適配于所在平臺。如果一個接口程序的參數(shù)中有一個指向sqlite4_env對象的指針,而且傳給這個參數(shù)的指針是空指針時(shí),這個接口程序就會使用默認(rèn)的全局sqlite4_env對象。另外,某些應(yīng)用可能要求在相同的地址空間上運(yùn)行兩個或者多個sqlite4實(shí)例,同時(shí)每個實(shí)例使用了各自不同的互斥原語,不同的內(nèi)存堆以及不同的時(shí)間日期函數(shù)等等。sqlite4通過對每個數(shù)據(jù)庫實(shí)例創(chuàng)建不同的sqlite4_env對象來滿足這種需求。sqlite4_env對象中還廢除了全局和靜態(tài)變量,這樣就可以非常容易地把sqlite4移植到哪些對靜態(tài)或者全局?jǐn)?shù)據(jù)提供有限支持的嵌入式系統(tǒng)中。

3.2 簡化的鍵/值存儲引擎

相對于sqlite3,sqlite4使用的鍵/值存儲引擎擁有一個大大簡化了的接口。這個存儲引擎是可拔插的;通過對qlite4_env對象在打開新的數(shù)據(jù)庫連接前做適當(dāng)?shù)母膭樱梢栽谶\(yùn)行時(shí)被改變。

sqlite4 需要一個實(shí)現(xiàn)了有序鍵/值對的存儲引擎,它的鍵和值是任意長度的二進(jìn)制數(shù)據(jù)。鍵必須惟一,且按字典排序。也就是說,鍵應(yīng)該根據(jù)一個比較函數(shù)進(jìn)行排序,例如:
 

代碼如下:

int key_compare(const void *key1, int n1, const void *key2, int n2){
  int c = memcmp(key1, key2, n1<n2 ? n1 : n2);
  if( c==0 ) c = n1 - n2;
  return c;
}

 

給定一個探針鍵,sqlite4需要能夠找到它最近的鍵,然后以字典序升序或降序遍歷鍵。向一個已有的鍵插入數(shù)據(jù)時(shí)會覆蓋舊數(shù)據(jù)。事務(wù),包括原子提交和回滾,由存儲引擎負(fù)責(zé)。

sqlite4經(jīng)由表和索引,將所有數(shù)據(jù)存儲到一個單獨(dú)的鍵空間, 與此相反,sqlite3中每個表和索引都需要一個單獨(dú)的鍵空間。sqlite4的存儲也與sqlite3不同,因?yàn)樗枰鎯σ嬉宰值湫驅(qū)︽I進(jìn)行排序, 而sqlite3使用了一個非常復(fù)雜的比較函數(shù)來決定記錄的存儲順序。

sqlite4與存儲引擎之間的通信是通過一個定義完善的并且簡單的接口進(jìn)行的。新的存儲引擎可以在運(yùn)行期間進(jìn)行替換:只要在指定數(shù)據(jù)庫連接之前替換sqlite4_env對象里的某些函數(shù)指針就可以了。

如果替換的存儲引擎不支持回滾,那么這就意味著sqlite4無法運(yùn)行rollback。如果替換的存儲引擎不支持事務(wù)嵌套,那么這就意味著sqlite4無法運(yùn)行嵌套事務(wù)。因此,嵌入到sqlite4中的存儲引擎的功能越少,對應(yīng)的整體的系統(tǒng)功能就會越差。

默認(rèn)情況下內(nèi)置的存儲引擎是日志結(jié)構(gòu)的合并式數(shù)據(jù)庫。它比leveldb要快很多倍,支持嵌套式事務(wù),它把整個內(nèi)容存儲在單一的磁盤文件里。sqlite4的未來版本還可能包含一個內(nèi)置的采用b樹結(jié)構(gòu)的存儲引擎。

3.3 現(xiàn)在的primary key是真正的主鍵

sqlite3允許聲明表中的任何單個或多列為主鍵。但在內(nèi)部,sqlite3只將primary key簡單地當(dāng)做唯一約束來對待。實(shí)際中用于存儲使用的鍵是每一行的rowid。

sqlite4則相反,它真實(shí)地使用聲明的表主鍵(更確切地說是primary key的編碼值)作為鍵而插入存儲引擎。sqlite4表通常沒有rowid(除非在表沒有primary key的情況下,這時(shí)需要一個rowid作為隱式主鍵。)這意味著內(nèi)容在磁盤中按主鍵的順序存儲。這也意味著可以通過對primary key的一次查詢即可定位記錄。在sqlite3中,主鍵上的一個搜索意味著在自動創(chuàng)建的索引中先找到rowid,然后依據(jù)該rowid對主表做一個二次搜索。

sqlite4 需要 primary key 的所有元素不能為空. 這是一條sql標(biāo)準(zhǔn).  由于早期版本的疏忽, sqlite3 沒有在primary key 列上強(qiáng)制加上這條not null約束,到該漏洞被發(fā)現(xiàn)的時(shí)候sqlite3已經(jīng)在被廣泛使用了, not null 約束的激活就可能會對太多的程序造成影響.
3.4 十進(jìn)制數(shù)

sqlite4 使用十進(jìn)制算數(shù)做所有的數(shù)字計(jì)算. sqlite4 從不使用c類型的double或者float(除了在double和內(nèi)部十進(jìn)制表示之間轉(zhuǎn)換時(shí)使用語接口例程中).  相反,所有數(shù)字值在內(nèi)部表示方式為一個帶有3位數(shù)字的基于10的指數(shù)的18位十進(jìn)制數(shù).  這一表示方式的特性有:

  •     即使是在缺乏對于ieee 754 binary64浮點(diǎn)數(shù)字支持的平臺上,其運(yùn)作起來也是可靠和兼容的.
  •     貨幣計(jì)算通常可以精確的進(jìn)行,不需要四舍五入.
  •     任何有符號和無符號的64位整數(shù)都能被精確的表示.
  •     浮點(diǎn)數(shù)范圍和精確度超出了 ieee 754 binary64 浮點(diǎn)數(shù).
  •     正無窮和負(fù)無窮以及 nan (not-a-number) 都有良好的表示方式.

sqlite4 使得整型和浮點(diǎn)型數(shù)字之間沒有了差別. 不過期卻有精確和近似數(shù)之間的分別. 在 c/c++ 中, 整形數(shù)是精確的而浮點(diǎn)數(shù)是近似的. 但sqlite4并不一定如此.  浮點(diǎn)數(shù)字在sqlite4可以是精確的.  可以用64位表示的整型數(shù)在sqlite4中總是精確的,而大型的整型數(shù)則可能是近似的.

sqlite4 數(shù)字格式是面向內(nèi)部使用的.  數(shù)字可以在整型和double型之間轉(zhuǎn)換,用于輸入和輸出.  磁盤上的存儲空間需要從1到12位的sqlite4數(shù)字值, 這取決于其大小和重要的位數(shù).

3.5 外鍵約束和遞歸觸發(fā)器是默認(rèn)開啟的

外鍵約束在sqlite3的早期版本中是沒有的,并且他們默認(rèn)關(guān)閉了向后兼容的能力。但是外鍵約束一直是有效的,并且在sqlite4中是默認(rèn)打開的。所有的外鍵約束都是默認(rèn)延遲的,盡管他們能夠被定義成立即創(chuàng)建。但是,沒有有效的機(jī)制去觸發(fā)外鍵約束,不管是延遲創(chuàng)建還是立即創(chuàng)建。

sqlite3提供了遞歸觸發(fā)器,但是這只是在一個運(yùn)行時(shí)才有效的功能。在sqlite4中,所有的觸發(fā)器在所有的時(shí)間段里都是遞歸的。

3.6 明確的索引覆蓋

sqlite4 像 create table 語句中條件了一個可選的子句,該子句定義了在索引中重復(fù)的附加列信息. 這可以讓應(yīng)用程序開發(fā)者在sqlite4中無需使用任何花招就可以明確地創(chuàng)建覆蓋索引.  例如:

 

create index cover1 on table1(a,b) covering(c,d);

上面的 cover1 索引可以在存儲引擎中用一個單一的查找操作來進(jìn)行形式如 select c,d from table1 where a=?1 and b=?2 的查詢.  索引中如果沒有附加的 covering 子句, sqlite4 也許會在存儲引擎中做兩次操作; 一次操作基于a和b的值來找到主鍵,而第二次操作則基于主鍵來找到c和d的值. covering 子句使得c和d的值在索引中就可用,這意味著它們無需第二次查找就可以從索引中提取出來.


covering 語句上有一個變化:
 

create index cover2 on table(x,y) covering all;

covering all 語句的意思是數(shù)據(jù)表的所有列都在索引中被重復(fù)一份,這就確保了原來的數(shù)據(jù)表永遠(yuǎn)也不會被訪問到,以完成一個使用了這個索引的查詢.  這種方法的缺點(diǎn),當(dāng)然就是信息重復(fù),而且因此讓數(shù)據(jù)庫文件更大.  但是通過在索引指標(biāo)上明確指定covering關(guān)閉,sqlite4可以讓應(yīng)用程序開發(fā)者權(quán)衡著從應(yīng)用程序中騰出空間和時(shí)間來讓其更加適用.

更多信息請查看技術(shù)文章
易賢網(wǎng)手機(jī)網(wǎng)站地址:簡單分析sqlite4的一些設(shè)計(jì)改變
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn)

版權(quán)所有:易賢網(wǎng)

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲国产日韩a在线播放性色| 亚洲欧洲另类国产综合| 国产一区二区三区电影在线观看| 国产精品午夜在线| 久久久蜜桃精品| 欧美一区二区私人影院日本| 欧美日韩日日摸| 色哟哟一区二区在线观看| 国产成人在线免费观看| 国产一区二区福利视频| 欧美丝袜自拍制服另类| 欧美色综合天天久久综合精品| 欧美成人一区二区三区| 欧美精品aⅴ在线视频| 91精品国产一区二区| 亚洲欧美偷拍三级| 亚洲一区av在线| 天堂av在线一区| 久久精品国产99久久6| 九九视频精品免费| av综合在线播放| 99久久精品免费看国产| 欧美丝袜丝交足nylons| 亚洲欧美日韩系列| 成人免费视频caoporn| 91亚洲国产成人精品一区二三| 欧美在线free| 久久久久9999亚洲精品| 国内成+人亚洲+欧美+综合在线 | 亚洲天堂福利av| 亚洲一区二区三区四区五区中文| 成人免费毛片app| 久久久久九九视频| 国产不卡在线视频| 欧美老人xxxx18| 午夜精品在线看| 粉嫩高潮美女一区二区三区| 久久综合色婷婷| 亚洲一二三区在线观看| 91免费看片在线观看| 亚洲欧美区自拍先锋| 91色porny在线视频| 亚洲美女视频一区| 欧美日韩一区小说| 日本v片在线高清不卡在线观看| 国产99久久久国产精品潘金| 国产精品乱码一区二三区小蝌蚪| 不卡av在线免费观看| 日韩欧美在线网站| 亚洲国产va精品久久久不卡综合 | 日韩精品一区在线| 亚洲免费观看高清| 欧美三片在线视频观看 | 国产999精品久久久久久绿帽| 国产日产欧美一区| 青娱乐精品视频在线| 精品久久久影院| 成人av在线播放网址| 亚洲精品中文在线影院| 丁香桃色午夜亚洲一区二区三区| 中文字幕日韩一区| 在线观看国产精品网站| 日本色综合中文字幕| 欧美亚洲日本国产| 性久久久久久久| 色屁屁一区二区| 免费国产亚洲视频| 国产精品每日更新| 91精品国产91久久久久久最新毛片| 免费成人av在线| 中文字幕乱码亚洲精品一区| 日本免费在线视频不卡一不卡二| 欧美精品一区二区三区一线天视频| 日韩主播视频在线| 欧美国产1区2区| 欧美日韩高清影院| 日本中文在线一区| 国产精品久久久久9999吃药| 懂色av一区二区三区免费观看 | 国产精品天美传媒| 91超碰这里只有精品国产| 一区二区三区在线观看欧美| 91色.com| 国产制服丝袜一区| 亚洲永久精品大片| 欧美国产视频在线| 日韩欧美一区二区久久婷婷| 欧美在线制服丝袜| 本田岬高潮一区二区三区| 国产一区二区美女诱惑| 天天综合色天天| 亚洲视频电影在线| 国产精品视频一二三| 精品久久久久香蕉网| 91精品国产综合久久香蕉麻豆| 色偷偷88欧美精品久久久| 国产福利一区二区三区视频| 精品一区二区影视| 日韩国产精品久久久久久亚洲| 亚洲精品精品亚洲| 亚洲欧美自拍偷拍色图| 欧美国产日韩一二三区| 亚洲精品在线观看网站| 精品毛片乱码1区2区3区| 91精品国产一区二区| 欧美视频一区二区三区四区| 在线亚洲一区二区| 香蕉加勒比综合久久| 一区二区三区在线免费播放| 亚洲视频免费在线| 亚洲精品乱码久久久久久久久| 中文字幕欧美区| 国产精品高潮呻吟| 国产精品久久久久影院色老大| 久久国产夜色精品鲁鲁99| 天天色综合成人网| 日韩精品色哟哟| 麻豆久久久久久| 亚洲欧美欧美一区二区三区| 综合欧美亚洲日本| 成人免费小视频| 亚洲婷婷国产精品电影人久久| 亚洲色图欧美激情| 亚洲美腿欧美偷拍| 亚洲成a天堂v人片| 日本aⅴ精品一区二区三区| 免费在线视频一区| 国产精品一品视频| 午夜激情久久久| 偷拍日韩校园综合在线| 日本不卡高清视频| 国产精品1区二区.| 99精品欧美一区二区三区小说 | 国产精品中文欧美| 国产传媒一区在线| 99v久久综合狠狠综合久久| 色一区在线观看| 91精品国产全国免费观看| 日韩欧美成人激情| 国产日产欧美一区二区视频| 中文字幕亚洲区| 香蕉成人伊视频在线观看| 麻豆免费看一区二区三区| 国产毛片精品国产一区二区三区| 东方欧美亚洲色图在线| 欧美视频一区在线观看| 91精品午夜视频| 欧美国产综合色视频| 夜夜嗨av一区二区三区四季av| 日韩和欧美的一区| 粉嫩嫩av羞羞动漫久久久 | 亚洲超碰精品一区二区| 国产一区二区三区四区五区入口| 99久久精品国产一区| 欧美放荡的少妇| 国产精品人人做人人爽人人添| 亚洲在线观看免费视频| 韩国av一区二区三区在线观看| av一二三不卡影片| 日韩欧美亚洲国产另类| 亚洲视频你懂的| 国产乱对白刺激视频不卡| 欧洲精品一区二区| 欧美激情一区二区三区不卡| 人妖欧美一区二区| 色综合色综合色综合色综合色综合| 精品精品欲导航| 亚洲线精品一区二区三区| 国产丶欧美丶日本不卡视频| 欧美日韩高清影院| 亚洲人一二三区| 夫妻av一区二区| 日韩精品一区二区三区视频| 一区二区日韩av| 成人h动漫精品一区二区| 日韩一卡二卡三卡四卡| 亚洲成人综合网站| 91啪九色porn原创视频在线观看| 精品久久久久久久久久久院品网| 无码av免费一区二区三区试看 | 日韩一区二区在线观看视频播放| 亚洲精品欧美综合四区| 国产精品一二三四五| 日韩一区二区三区四区五区六区| 亚洲激情五月婷婷| 一本一道综合狠狠老| 国产精品麻豆99久久久久久| 国产精品资源在线| 久久毛片高清国产| 麻豆精品国产传媒mv男同| 777色狠狠一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 成人激情校园春色| 国产精品美女久久福利网站| 高清不卡在线观看av| 亚洲精品一区二区三区四区高清 | 日韩一区欧美二区| 欧美专区日韩专区| 亚洲一级不卡视频| 欧美日韩在线亚洲一区蜜芽|