• <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)定。

            av无码久久久久久不卡网站| 久久久久亚洲精品无码蜜桃| 国产精品免费久久久久电影网| 青青热久久综合网伊人| 高清免费久久午夜精品| 国产精品免费久久久久久久久| 亚洲国产精品嫩草影院久久| 亚洲精品乱码久久久久久蜜桃图片 | 久久久久亚洲精品无码网址| 2019久久久高清456| 精品九九久久国内精品| 国内精品伊人久久久久777| 久久精品成人国产午夜| 久久人人爽人人爽人人爽 | 99久久夜色精品国产网站| 欧美伊香蕉久久综合类网站| 国内精品久久久久影院薰衣草| A级毛片无码久久精品免费| 欧美噜噜久久久XXX| 亚洲国产成人久久精品99| 94久久国产乱子伦精品免费| 国产精品99久久久精品无码| 99久久综合国产精品二区| 久久w5ww成w人免费| 精品国产乱码久久久久软件| 久久免费线看线看| 久久久久久久亚洲Av无码| 一本一本久久a久久精品综合麻豆| AV无码久久久久不卡蜜桃| 久久亚洲私人国产精品vA| 久久频这里精品99香蕉久| 久久久久国产精品三级网| 久久精品亚洲精品国产欧美| 9191精品国产免费久久| 99久久国产热无码精品免费久久久久 | 色狠狠久久综合网| 久久e热在这里只有国产中文精品99| 国产午夜福利精品久久2021 | 国产精品99久久不卡| 国产呻吟久久久久久久92| 狠狠色伊人久久精品综合网|