Ⅰ 怎麼修改db資料庫文件
Berkeley DB (DB)是一個高性能的,嵌入資料庫編程庫,和C語言,C++,java,Perl,Python,PHP,Tcl以及其他很多語言都有綁定。Berkeley DB可以保存任意類型的鍵/值對,而且可以為一個鍵保存多個數據。Berkeley DB可以支持數千的並發線程同時操作資料庫,支持最大256TB的數據,廣泛用於各種操作系統包括大多數Unix類操作系統和Windows操作系統以及實時操作系統。 2.0版本或以上的Berkeley DB由Sleepycat Software公司開發,並使用基於自由軟體許可協議/私有許可協議的雙重授權方式提供[1],附有源代碼。開發者如果想把Berkeley DB嵌入在私有軟體內需要得到Sleepycat公司的許可,若將軟體同樣遵循GPL發布,則不需許可即可使用。而2.0版本以下的則使用BSD授權,可自由作商業用途。 Berkeley DB最初開發的目的是以新的HASH訪問演算法來代替舊的hsearch函數和大量的dbm實現(如AT&T的dbm,Berkeley的 ndbm,GNU項目的gdbm),Berkeley DB的第一個發行版在1991年出現,當時還包含了B+樹數據訪問演算法。在1992年,BSD UNIX第4.4發行版中包含了Berkeley DB1.85版。基本上認為這是Berkeley DB的第一個正式版。在1996年中期,Sleepycat軟體公司成立,提供對Berkeley DB的商業支持。在這以後,Berkeley DB得到了廣泛的應用,成為一款獨樹一幟的嵌入式資料庫系統。2006年Sleepycat公司被Oracle 公司收購,Berkeley DB成為Oracle資料庫家族的一員,Sleepycat原有開發者繼續在Oracle開發Berkeley DB,Oracle繼續原來的授權方式並且加大了對Berkeley DB的開發力度,繼續提升了Berkeley DB在軟體行業的聲譽。Berkeley DB的當前最新發行版本是4.7.25。 值得注意的是DB是嵌入式資料庫系統,而不是常見的關系/對象型資料庫,對SQL語言不支持,也不提供資料庫常見的高級功能,如存儲過程,觸發器等。 Berkeley DB的體系結構Berkeley DB以擁有比Microsoft SQL Server和Oracle等資料庫系統而言更簡單的體系結構而著稱。例如,它不支持網路訪問—程序通過進程內的API訪問資料庫。 他不支持SQL或者其他的資料庫查詢語言,不支持表結構和數據列。 訪問資料庫的程序自主決定數據如何儲存在記錄里,Berkeley DB不對記錄里的數據進行任何包裝,每個記錄有且只有兩部分:鍵、值,所以在Berkeley DB的背景下通常用key/data pair指代一個記錄。記錄和它的鍵都可以達到4G位元組的長度。 盡管架構很簡單,Berkeley DB卻支持很多高級的資料庫特性,比如ACID 資料庫事務處理,細粒度鎖,XA介面,熱備份以及同步復制。 Berkeley DB包含有與某些經典Unix資料庫編程庫兼容的介面,包括:dbm,ndbm和hsearch。Berkeley DB的核心數據結構資料庫環境句柄DB_ENV: 每個DB_ENV相當於一個資料庫,它包含了資料庫全局信息,比如緩沖區大小、以及對事務、日誌、鎖等子系統的全局配置信息。資料庫句柄結構DB:每個DB相當於關系資料庫的一個表,其中存儲了很多key/data pair。DB句柄代表了一個包含了若干描述資料庫表屬性的參數,如資料庫訪問方法類型、邏輯頁面大小、資料庫名稱等;同時,DB結構中包含了大量的資料庫處理函數指針,大多數形式為 (*dosomething)(DB *, arg1, arg2, …)。其中最重要的有open,close,put,get等函數。 資料庫記錄結構DBT:DB中的記錄由關鍵字和數據構成,關鍵字和數據都用結構DBT表示。實際上完全可以把關鍵字看成特殊的數據。結構中最重要的兩個欄位是 void * data和u_int32_t size,分別對應數據本身和數據的長度。 資料庫游標結構DBC:游標(cursor)是資料庫應用中常見概念,其本質上就是一個關於特定記錄的遍歷器。注意到DB支持多重記錄(plicate records),即多條記錄有相同關鍵字,在對多重記錄的處理中,使用游標是最容易的方式。 資料庫環境句柄結構DB_ENV:環境在DB中屬於高級特性,本質上看,環境是多個資料庫的包裝器。當一個或多個資料庫在環境中打開後,環境可以為這些資料庫提供多種子系統服務,例如多線/進程處理支持、事務處理支持、高性能支持、日誌恢復支持等。 DB中核心數據結構在使用前都要初始化,隨後可以調用結構中的函數(指針)完成各種操作,最後必須關閉數據結構。從設計思想的層面上看,這種設計方法是利用面向過程語言實現面對對象編程的一個典範。 Berkeley DB數據訪問演算法在資料庫領域中,數據訪問演算法對應了數據在硬碟上的存儲格式和操作方法。在編寫應用程序時,選擇合適的演算法可能會在運算速度上提高1個甚至多個數量級。大多數資料庫都選用B+樹演算法,DB也不例外,同時還支持HASH演算法、Recno演算法和Queue演算法。接下來,我們將討論這些演算法的特點以及如何根據需要存儲數據的特點進行選擇。 B+樹演算法B+樹是一個平衡樹,關鍵字有序存儲,並且其結構能隨數據的插入和刪除進行動態調整。為了代碼的簡單,DB沒有實現對關鍵字的前綴碼壓縮。B+樹支持對數據查詢、插入、刪除的常數級速度。關鍵字可以為任意的數據結構.HASH演算法DB中實際使用的是擴展線性HASH演算法(extended linear hashing),可以根據HASH表的增長進行適當的調整。關鍵字可以為任意的數據結構。 要求每一個記錄都有一個邏輯紀錄號,邏輯紀錄號由演算法本身生成。實際上,這和關系型資料庫中邏輯主鍵通常定義為int AUTO型是同一個概念。Recho建立在B+樹演算法之上,提供了一個存儲有序數據的介面。記錄的長度可以為定長或不定長。 和Recno方式接近, 只不過記錄的長度為定長。數據以定長記錄方式存儲在隊列中,插入操作把記錄插入到隊列的尾部,相比之下插入速度是最快的。 對演算法的選擇首先要看關鍵字的類型,如果為復雜類型,則只能選擇B+樹或HASH演算法,如果關鍵字為邏輯記錄號,則應該選擇Recno或Queue演算法。當工作集關鍵字有序時,B+樹演算法比較合適;如果工作集比較大且基本上關鍵字為隨機分布時,選擇HASH演算法。Queue演算法只能存儲定長的記錄,在高的並發處理情況下,Queue演算法效率較高;如果是其它情況,則選擇Recno演算法,Recno演算法把數據存儲為平面文件格式。Berkeley DB的資源鏈接:官方主頁: http://www.oracle.com/database/berkeley-db/db/index.html產品下載: http://www.oracle.com/technology/software/procts/berkeley-db/index.html官方開發者文檔中心: http://www.oracle.com/technology/documentation/berkeley-db/db/index.html產品技術信息: http://www.oracle.com/technology/procts/berkeley-db/pdf/berkeley-db-family-datasheet.pdf http://www.oracle.com/database/docs/berkeley-db-datasheet.pdf http://www.oracle.com/database/docs/Berkeley-DB-v-Relational.pdf官方主頁上有很多有趣的成功案例的白皮書和技術文檔,值得大家學習
Ⅱ 如何做演算法研究
一、DSP與TI
為什麼提到電機控制很多人首先會聯想到DSP?而談到DSP控制總繞不過TI,首先DSP晶元是一種具有特殊結構的微處理器。該晶元的內部採用程序和數據分開的哈佛結構,具有專門的硬體乘法器,提供特殊的指令,可以用來快速地實現各種數字信號處理演算法。基於DSP晶元構成的控制系統事實上是一個單片系統,因此整個控制所需的各種功能都可由DSP晶元來實現。因此,可以減小目標系統的體積,減少外部元件的個數,增加系統的可靠性。優點是穩定性好、精度高、處理速度快,目前在變頻器、伺服行業有大量使用。主流的DSP廠家有美國德州儀器(Texas Instruments,TI)、ADI、motorola、傑爾等其他廠商,其中TI的TMS320系列以數字控制和運動控制為主,以價格低廉、簡單易用、功能強大很是受歡迎。
二、常見的電機控制演算法及研究方法
1、電機控制按工作電源種類劃分:可分為直流電機和交流電機。按結構和工作原理可劃分:可分為直流電動機、非同步電動機、同步電動機。不同的電機所採用的驅動方式也是不相同的,這次主要介紹伺服電機,伺服主要靠脈沖來定位,伺服電機接收到1個脈沖,就會旋轉1個脈沖對應的角度,從而實現位移,因此,伺服電機本身具備發出脈沖的功能,所以伺服電機每旋轉一個角度,都會發出對應數量的脈沖,同時又與伺服電機接受的脈沖形成了呼應,或者叫閉環,進而很精確的控制電機的轉動,從而實現精確的定位,可以達到0.001mm。伺服電機相比較普通電機優勢在於控制精度、低頻扭矩,過載能力,響應速度等方面,所以被廣泛使用於機器人,數控機床,注塑,紡織等行業
三、PWM控制及測試結果
脈沖寬度調制是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中,脈沖寬度調制是一種模擬控制方式,其根據相應載荷的變化來調制晶體管基極或MOS管柵極的偏置,來實現晶體管或MOS管導通時間的改變,從而實現開關穩壓電源輸出的改變
Ⅲ 大數據技術有哪些
大數據技術,就是從各種類型的數據中快速獲得有價值信息的技術。大數據領域已經涌現出了大量新的技術,它們成為大數據採集、存儲、處理和呈現的有力武器。
大數據處理關鍵技術一般包括:大數據採集、大數據預處理、大數據存儲及管理、大數據分析及挖掘、大數據展現和應用(大數據檢索、大數據可視化、大數據應用、大數據安全等)。
六、大數據展現與應用技術
大數據技術能夠將隱藏於海量數據中的信息和知識挖掘出來,為人類的社會經濟活動提供依據,從而提高各個領域的運行效率,大大提高整個社會經濟的集約化程度。在我國,大數據將重點應用於以下三大領域:商業智能、政府決策、公共服務。例如:商業智能技術,政府決策技術,電信數據信息處理與挖掘技術,電網數據信息處理與挖掘技術,氣象信息分析技術,環境監測技術,警務雲應用系統(道路監控、視頻監控、網路監控、智能交通、反電信詐騙、指揮調度等公安信息系統),大規模基因序列分析比對技術,Web信息挖掘技術,多媒體數據並行化處理技術,影視製作渲染技術,其他各種行業的雲計算和海量數據處理應用技術等。
Ⅳ cs61b實驗記錄(三)project 2 prim迷宮隨機生成演算法
nothing special
具體詳見我的GitHub: https://github.com/BoL0150/Berkeley-cs61b/tree/main/hw1
Random對象是一個「偽隨機數」生成器,它可以產生一串無窮的看起來是隨機數的數字序列,調用nextInt方法獲取序列中的每一個數字。
它之所以叫「偽隨機數」是因為它產生的序列並不是真正隨機的。我們獲取不同的序列的方式是向Random的構造器中傳入一個數字,這個數字被稱為「seed」,如果我們用相同的seed構造Random,那麼我們一定會獲得完全相同的序列。
java.lang.Math中也有一個名為random()的靜態方法可以生成隨機數
Math.random() 方法生成[0, 1)范圍內的double類型隨機數;Random類中的nextXxxx(n)系列方法生成0(包括)到n(不包括)之間的隨機數;
繪制地圖:
從宏觀上來看,主要分為這么幾步:
創建一個Room類,將每一個房間當作一個對象,隨機生成房間的坐標以及長和寬,然後判斷房間是否重疊,
同時設置一個參數,控制房間重復生成的上限次數。 將所有生成的房間對象放在一個List中 ,因為在修建完迷宮後還需要對每一個房間與它旁邊的迷宮進行打通,以便獲取房間的位置和參數。
此時在房間中填GRASS以及使用兩個數組的原因稍後進行解釋。
我們將這一步分解來看,首先:如何在一張空的圖上生成迷宮?
我們採用 prim迷宮隨機生成演算法 ,此演算法的原理及具體實現如下:
原理:
具體實現:
生成迷宮時要注意 隨機 從候選列表中選取點,否則生成的迷宮會朝著同一個方向
我們知道了如何在空的圖上生成迷宮,也可以由此推斷出如何在房間的周圍生成迷宮
這一步沒什麼好說的,對每一個房間隨機選取一條邊上的一點向外打通,如果不符合條件(如碰到NOTHING等)就重新選取一點。
然而,此時的圖中還有很多的死胡同(即三面都是牆的FLOOR),以及房間中依然是GRASS,所以我們需要填補所有的死胡同,將GRASS替換為FLOOR。
去除死胡同我們需要對每一個點,查看周圍的四個點是否是WALL,然後改變這個點,再進入下一個點。這會讓人想起DFS,但是原本的DFS是沿著一條路線,從一頭走到另一頭,對路上的每一個點都只是 依次 查看周圍的點,一旦找到可以通過的點,就立馬進入, 無法確定這一點周圍是否有3個WALL 。只有當走到頭時,掃描了周圍的四個點,發現都無法通過,才會往後退。也就是說,只有後退的時候,我們才能知道某一點周圍所有點的情況。而填補所有的死胡同需要我們從所有的死胡同的終點出發,向中間匯聚,一邊移動一邊填補。
所以我們需要將DFS改造成 前進和後退時都要查看周圍所有點的情況 ,才能進行下一步。
我們還需要移除所有多餘的牆,也就是四個角上沒有FLOOR的WALL
最後,再添加上Player和Lock_Door就完成了
附上autograder的評分