• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
            簡(jiǎn)單、開放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            內(nèi)存數(shù)據(jù)庫機(jī)制的使用研究報(bào)告

            相對(duì)于傳統(tǒng)磁盤數(shù)據(jù)庫,內(nèi)存數(shù)據(jù)庫通過將數(shù)據(jù)完全加載到內(nèi)存,在內(nèi)存中實(shí)現(xiàn)對(duì)數(shù)據(jù)的管理,在數(shù)據(jù)同步、數(shù)據(jù)傳送、事務(wù)處理、并行操作等方面進(jìn)行了相應(yīng)的改進(jìn)設(shè)計(jì),使得內(nèi)存數(shù)據(jù)庫在處理數(shù)據(jù)上能夠比磁盤數(shù)據(jù)庫快得多,可以有效地解決計(jì)費(fèi)系統(tǒng)中信控、實(shí)時(shí)累賬等部分對(duì)系統(tǒng)響應(yīng)要求高的問題。

            項(xiàng)目決定在信控模塊使用內(nèi)存數(shù)據(jù)庫機(jī)制取代賬單中心模式進(jìn)行實(shí)時(shí)累賬優(yōu)惠觸發(fā)信控。

            以下是對(duì)FastDB進(jìn)行的幾點(diǎn)說明:

            【開源代碼鏈接:http://sourceforge.net/projects/fastdb

            1、 功能歸納

            1 內(nèi)存數(shù)據(jù)庫具備傳統(tǒng)數(shù)據(jù)庫的一些基本功能:

            A 數(shù)據(jù)的管理,內(nèi)存數(shù)據(jù)庫機(jī)制是支持永久數(shù)據(jù)的管理的,包括數(shù)據(jù)庫的的定義、存儲(chǔ)、維護(hù)等功能。

            B 數(shù)據(jù)的操作,內(nèi)存數(shù)據(jù)庫支持對(duì)數(shù)據(jù)進(jìn)行增,刪,改,查,數(shù)據(jù)完整性校驗(yàn)等一些基本功能。

            C 事務(wù)管理,內(nèi)存數(shù)據(jù)庫支持調(diào)度,進(jìn)程間、線程間的一些并發(fā)等操作。

            d. 數(shù)據(jù)恢復(fù)備份機(jī)制,內(nèi)存數(shù)據(jù)庫支持在線備份和系統(tǒng)崩潰后的自動(dòng)恢復(fù)。

            2 FastDB 在功能上特有的一些特點(diǎn)

            A 查詢優(yōu)化,與傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)咋紅執(zhí)行查詢相比,當(dāng)所有的數(shù)據(jù)存在于內(nèi)存當(dāng)中時(shí),查詢的數(shù)度是非常快的,但是 FastDB 還是進(jìn)一步使用了索引 (hash,T-tree) 、反向指針和查詢并行化進(jìn)行了查詢優(yōu)化。

            B 提供了一個(gè)靈活方便的應(yīng)用程序語言接口,能夠方便寫出查詢等語句。

            2 工作原理

            FastDB 是一個(gè)高效率的內(nèi)存數(shù)據(jù)庫系統(tǒng),在磁盤上的數(shù)據(jù)庫文件和使用該數(shù)據(jù)庫的每一個(gè)應(yīng)用程序占用的虛擬內(nèi)存空間相映射,這樣取消了數(shù)據(jù)文件和緩沖池中的數(shù)據(jù)傳輸。再將整個(gè)文件數(shù)據(jù)讀入內(nèi)存,并且使用了高性能的鎖工具實(shí)現(xiàn)了只讀模式線程間、單個(gè)更改模式線程和多個(gè)只讀模式線程間的并發(fā)執(zhí)行。 FastDB 通過位圖實(shí)現(xiàn)對(duì)內(nèi)存進(jìn)行分配,最小單位塊是分配量子( 16 字節(jié))。如此大大提高了數(shù)據(jù)引用的局部性(對(duì)象數(shù)據(jù)盡可能分配在連續(xù)的內(nèi)存區(qū)域),最小化了修改頁的數(shù)目和減少了事務(wù)提交時(shí)間。事務(wù)提交協(xié)議基于一個(gè)影子根頁算法,對(duì)數(shù)據(jù)庫執(zhí)行原子更新操作,恢復(fù)效率很高,在存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)上可以采用 T-tree 結(jié)構(gòu)( T-tree AVL-tree 相似,只是 T-tree 中每個(gè)節(jié)點(diǎn)中順序存儲(chǔ)了多個(gè)值),對(duì)于大量相似重復(fù)性數(shù)據(jù)的查詢性能相當(dāng)高;也可以采用 Hash 存儲(chǔ),這是用關(guān)鍵字段定位表中記錄的最好辦法(采用等號(hào)進(jìn)行查詢)。

            影子根頁算法概述: FastDB 數(shù)據(jù)庫中每條對(duì)象都具有唯一的標(biāo)識(shí)符( OID ),用作一個(gè)數(shù)組(對(duì)象索引)的下標(biāo),元素值表示對(duì)象的一個(gè)句柄,在 FastDB 數(shù)據(jù)庫中存在兩個(gè)索引(當(dāng)前索引和影子索引),當(dāng)某個(gè)對(duì)象第一次被修改時(shí),它會(huì)創(chuàng)建一個(gè)副本,當(dāng)前索引中的對(duì)象句柄被修改指向副本,影子索引仍然包含一個(gè)指向該對(duì)象原始版本的句柄。所有更改發(fā)生在副本上, FastDB 在對(duì)象索引的一個(gè)特殊位圖頁上標(biāo)記出哪個(gè)索引包含修改過的對(duì)象句柄。

            當(dāng)一個(gè)事務(wù)被提交時(shí), FastDB 首先檢查對(duì)象索引的尺寸的大小,若增長(zhǎng)了,還會(huì)重新為對(duì)象索引的影子副本重新分配內(nèi)存,然后釋放“舊對(duì)象”占用的內(nèi)存,釋放后,將修改過的所有位圖頁 flush 到磁盤上,然后 FastDB 將改變數(shù)據(jù)庫頭部中的當(dāng)前對(duì)象索引指示符,以切換對(duì)象索引的角色。當(dāng)前對(duì)象索引將變成影子索引之后, FastDB 把修改過的所有句柄從新的對(duì)象索引中復(fù)制到先前是影子的、現(xiàn)在已成為當(dāng)前的對(duì)象索引中。此時(shí),兩個(gè)索引都得到了同步。(具體內(nèi)存塊的移動(dòng)索引管理細(xì)節(jié)需要進(jìn)一步琢磨)

            3、 部署方法

            1 應(yīng)用程序編譯環(huán)境需求,首先是任何一個(gè) FastDB 應(yīng)用程序必須包含頭文件: fastdb.h ;

            然后是可以選擇調(diào)用庫文件( FastDB 編譯后提供靜態(tài)庫 (libfastdb_r.a) 和共享庫兩種庫 (libfastdb_r.so/ libfastdb_r.so.2) 給調(diào)用);

            最后是 FastDB 提供很多編譯選項(xiàng)接口,用戶可以根據(jù)需要進(jìn)行設(shè)置,比如:容錯(cuò)支持,無盤模式,鎖檢測(cè)清理機(jī)制等等功能。

            2 運(yùn)行系統(tǒng)環(huán)境需求,理論上說,內(nèi)存加載的數(shù)據(jù)庫文件規(guī)模最小是 1MB ,上限就是內(nèi)存和磁盤的容量了( FastDB 的整個(gè)優(yōu)化設(shè)計(jì)是基于真?zhèn)€數(shù)據(jù)庫系統(tǒng)存放在機(jī)器物理內(nèi)存中,但是它依然支持將應(yīng)用在規(guī)模超過物理內(nèi)存的數(shù)據(jù)庫上,只是效率不會(huì)很高)

            4 、 接口調(diào)用方法

            1 FastDB 提供了 subsql 交互式工具供用戶進(jìn)行備份,查詢,監(jiān)控等。(按著提示走即可)

            2 C++ 接口

            A 打開或創(chuàng)建數(shù)據(jù)庫:

            dbDatabase db(parameter);

            db.open(parameter);

            mode 的有: dbReadOnly , dbAllAccess , dbConcurrentRead , dbConcurrentUpdate 四模式

            B FastDB 支持的數(shù)據(jù)類型:

            類型 ???????????????????? 描述

            bool ??????????????????? 布爾類型 (true,false)

            int1 ???????????????????? 一個(gè)字節(jié)的帶符號(hào)整型 (-128..127)

            int2 ???????????????????? 兩個(gè)字節(jié)的帶符號(hào)整型 (-32768..32767)

            int4 ???????????????????? 四個(gè)字節(jié)的帶符號(hào)整型 (-2147483648..2147483647)

            int8 ???????????????????? 八個(gè)字節(jié)的帶符號(hào)整型 (-2**63..2**63-1)

            real4 ?????????????????? 四個(gè)字節(jié)的 ANSI 浮點(diǎn)型

            real8 ?????????????????? 八個(gè)字節(jié)的雙精度浮點(diǎn)型

            char const* ????????? 非中斷整型

            dbReference<T> ?? 到類 T 的指針。

            dbArray<T> ???????? 元素類型是 T 的動(dòng)態(tài)數(shù)組。

            C FastDB 對(duì)表的接口描述

            C++ 需要用類的形式來定義表結(jié)構(gòu),然后一一映射到表的 fields ,如果類有方法就得用宏: ?? CLASS_DESCRIPTOR(name,field_list) ,進(jìn)行描述,還有方法宏 TYPE_DESCRIPTOR(field_list) (具體的查看的幫助文檔)

            最后只需要將類進(jìn)行注冊(cè): REGISTER(Class Name);

            D 游標(biāo)

            游標(biāo)有兩種模式: ??? dbCursorViewOnly dbCursorForUpdate

            定義舉例 dbCursor<Class Name> instance (dbCursorForUpdate);

            提供了數(shù)據(jù)庫的改、刪、查方法接口

            Instance.udate()

            Instance.remove()/ removeAllSelected () / removeAll ()

            Instance.select()/select(dbquery &q);

            E dbquery Q;

            Q = “id = ” idvalue,”and datetime = ”,currtime;

            F

            數(shù)據(jù)的 insert 方法 FastDB 提供了重載

            dbReference<T> insert(T const& record);

            所以使用起來是很簡(jiǎn)單的。

            具體細(xì)節(jié)用法查閱手冊(cè)。 Hoho 。。。

            5 改造計(jì)劃

            暫時(shí)不用改造現(xiàn)有機(jī)制,如果不想在內(nèi)存數(shù)據(jù)庫當(dāng)中形成綜合賬單表(從原來的賬單中心的四張內(nèi)存表(累賬賬單表,周期性費(fèi)用表,優(yōu)惠結(jié)果表,調(diào)賬結(jié)果表)中提?。?,減少冗余,就需要改造其現(xiàn)有的事務(wù)提交機(jī)制。使得事務(wù)提交后,程序能夠控制數(shù)據(jù)改變對(duì)其他進(jìn)程的可見性。

            6 、本人的兩點(diǎn)擔(dān)心

            1 FastDB 適合主導(dǎo)讀取模式的應(yīng)用程序,在大規(guī)模數(shù)據(jù)群處理上,進(jìn)行更改事務(wù)處理的效率和準(zhǔn)確性能上有待后查。

            2 FastDB 雖然是一個(gè)極其優(yōu)秀的開源內(nèi)存數(shù)據(jù)庫,但畢竟沒有或者很少經(jīng)過商用的專業(yè)的測(cè)試。系統(tǒng)中復(fù)雜的內(nèi)存管理過程,可能容易產(chǎn)生過多的內(nèi)存碎片,導(dǎo)致系統(tǒng)的不穩(wěn)定。

            日韩欧美亚洲国产精品字幕久久久| 亚洲一区中文字幕久久| 国产69精品久久久久观看软件| 久久久久亚洲AV无码专区首JN | 国产高清美女一级a毛片久久w| 亚洲一本综合久久| 国内精品久久久久影院薰衣草 | 97久久久精品综合88久久| 久久午夜无码鲁丝片午夜精品| 漂亮人妻被黑人久久精品| 国产精品内射久久久久欢欢| 囯产极品美女高潮无套久久久| 久久九九全国免费| 伊人久久大香线蕉综合5g| 天天综合久久久网| 久久精品九九亚洲精品| 亚洲国产高清精品线久久 | 国内精品久久久久久久久电影网| 国产精品久久久久乳精品爆| 99久久国产宗和精品1上映| 欧美麻豆久久久久久中文| 久久婷婷国产综合精品| 少妇人妻综合久久中文字幕| 欧美国产成人久久精品| 国产精自产拍久久久久久蜜| 国产精品久久久天天影视| 日韩久久久久久中文人妻| 久久精品国产精品亚洲精品| 久久婷婷色香五月综合激情| 人妻无码精品久久亚瑟影视| 国产真实乱对白精彩久久| 久久精品成人影院| 久久久久国产亚洲AV麻豆| 久久精品国产亚洲AV不卡| 久久久久18| 狠狠色丁香婷婷久久综合五月| 久久久久亚洲AV无码去区首| 亚洲精品国产综合久久一线| 久久国产亚洲精品| 7777精品伊人久久久大香线蕉| 精品伊人久久大线蕉色首页|