• <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.¢%

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

            內存數據庫機制的使用研究報告

            Posted on 2010-11-01 16:17 S.l.e!ep.¢% 閱讀(1281) 評論(0)  編輯 收藏 引用 所屬分類: FastDB

            內存數據庫機制的使用研究報告

            相對于傳統磁盤數據庫,內存數據庫通過將數據完全加載到內存,在內存中實現對數據的管理,在數據同步、數據傳送、事務處理、并行操作等方面進行了相應的改進設計,使得內存數據庫在處理數據上能夠比磁盤數據庫快得多,可以有效地解決計費系統中信控、實時累賬等部分對系統響應要求高的問題。

            項目決定在信控模塊使用內存數據庫機制取代賬單中心模式進行實時累賬優惠觸發信控。

            以下是對FastDB進行的幾點說明:

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

            1、 功能歸納

            1 內存數據庫具備傳統數據庫的一些基本功能:

            A 數據的管理,內存數據庫機制是支持永久數據的管理的,包括數據庫的的定義、存儲、維護等功能。

            B 數據的操作,內存數據庫支持對數據進行增,刪,改,查,數據完整性校驗等一些基本功能。

            C 事務管理,內存數據庫支持調度,進程間、線程間的一些并發等操作。

            d. 數據恢復備份機制,內存數據庫支持在線備份和系統崩潰后的自動恢復。

            2 FastDB 在功能上特有的一些特點

            A 查詢優化,與傳統數據庫管理系統咋紅執行查詢相比,當所有的數據存在于內存當中時,查詢的數度是非??斓模?/span> FastDB 還是進一步使用了索引 (hash,T-tree) 、反向指針和查詢并行化進行了查詢優化。

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

            2 、 工作原理

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

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

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

            3、 部署方法

            1 應用程序編譯環境需求,首先是任何一個 FastDB 應用程序必須包含頭文件: fastdb.h ;

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

            最后是 FastDB 提供很多編譯選項接口,用戶可以根據需要進行設置,比如:容錯支持,無盤模式,鎖檢測清理機制等等功能。

            2 運行系統環境需求,理論上說,內存加載的數據庫文件規模最小是 1MB ,上限就是內存和磁盤的容量了( FastDB 的整個優化設計是基于真個數據庫系統存放在機器物理內存中,但是它依然支持將應用在規模超過物理內存的數據庫上,只是效率不會很高)

            4 、 接口調用方法

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

            2 C++ 接口

            A 打開或創建數據庫:

            dbDatabase db(parameter);

            db.open(parameter);

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

            B FastDB 支持的數據類型:

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

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

            int1 ???????????????????? 一個字節的帶符號整型 (-128..127)

            int2 ???????????????????? 兩個字節的帶符號整型 (-32768..32767)

            int4 ???????????????????? 四個字節的帶符號整型 (-2147483648..2147483647)

            int8 ???????????????????? 八個字節的帶符號整型 (-2**63..2**63-1)

            real4 ?????????????????? 四個字節的 ANSI 浮點型

            real8 ?????????????????? 八個字節的雙精度浮點型

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

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

            dbArray<T> ???????? 元素類型是 T 的動態數組。

            C FastDB 對表的接口描述

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

            最后只需要將類進行注冊: REGISTER(Class Name);

            D 游標

            游標有兩種模式: ??? dbCursorViewOnly , dbCursorForUpdate

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

            提供了數據庫的改、刪、查方法接口

            Instance.udate()

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

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

            E dbquery Q;

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

            F

            數據的 insert 方法 FastDB 提供了重載

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

            所以使用起來是很簡單的。

            具體細節用法查閱手冊。 Hoho 。。。

            5 、 改造計劃

            暫時不用改造現有機制,如果不想在內存數據庫當中形成綜合賬單表(從原來的賬單中心的四張內存表(累賬賬單表,周期性費用表,優惠結果表,調賬結果表)中提?。瑴p少冗余,就需要改造其現有的事務提交機制。使得事務提交后,程序能夠控制數據改變對其他進程的可見性。

            6 、本人的兩點擔心

            1 FastDB 適合主導讀取模式的應用程序,在大規模數據群處理上,進行更改事務處理的效率和準確性能上有待后查。

            2 FastDB 雖然是一個極其優秀的開源內存數據庫,但畢竟沒有或者很少經過商用的專業的測試。系統中復雜的內存管理過程,可能容易產生過多的內存碎片,導致系統的不穩定。

            99久久精品费精品国产| 国产激情久久久久久熟女老人| 日本久久久久久久久久| 午夜精品久久久久久99热| 久久国产亚洲精品| 久久夜色精品国产www| 久久久久久亚洲精品不卡| 国产高清美女一级a毛片久久w| 久久精品国产亚洲AV嫖农村妇女 | 久久av无码专区亚洲av桃花岛| 少妇被又大又粗又爽毛片久久黑人| 国产精品伦理久久久久久| 久久久久99精品成人片牛牛影视| 国产成人精品久久综合| 久久精品国产国产精品四凭 | 久久99国产精品久久久| 国产精品福利一区二区久久| 99麻豆久久久国产精品免费| 人妻无码αv中文字幕久久| 无码久久精品国产亚洲Av影片| 国产成人精品久久一区二区三区av | 久久夜色精品国产| 中文字幕日本人妻久久久免费| 伊人久久大香线蕉av不变影院| 一本色道久久99一综合| 国产精品一区二区久久国产| 色综合久久久久| 2021国产精品午夜久久 | 久久99精品久久久大学生| 亚洲国产精品无码久久一线| 国产午夜福利精品久久2021 | 久久亚洲日韩看片无码| 2021少妇久久久久久久久久| 精品久久久久久国产免费了| 国产成人久久精品一区二区三区| 人人狠狠综合久久亚洲婷婷| 久久青青草视频| 精品免费久久久久国产一区| 伊人久久大香线蕉av不卡| 久久精品无码免费不卡| 国内精品久久久久久99|