<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        SQLite、BerkeleyDB、PostgreSQL、MySQL、Firebird、mSQL

        來源:懂視網 責編:小采 時間:2020-11-09 07:40:19
        文檔

        SQLite、BerkeleyDB、PostgreSQL、MySQL、Firebird、mSQL

        SQLite、BerkeleyDB、PostgreSQL、MySQL、Firebird、mSQL:SQLite數據庫是中小站點CMS的最佳選擇 作者:孫毓波 (AKCMS 作者) SQLite 是一個類似Access的輕量級數據庫系統,但是更 SQLite數據庫是中小站點CMS的最佳選擇 作者:孫毓波 (AKCMS 作者) SQLite 是一個類似Access的輕量級數據庫系統,但是更小
        推薦度:
        導讀SQLite、BerkeleyDB、PostgreSQL、MySQL、Firebird、mSQL:SQLite數據庫是中小站點CMS的最佳選擇 作者:孫毓波 (AKCMS 作者) SQLite 是一個類似Access的輕量級數據庫系統,但是更 SQLite數據庫是中小站點CMS的最佳選擇 作者:孫毓波 (AKCMS 作者) SQLite 是一個類似Access的輕量級數據庫系統,但是更小

        SQLite數據庫是中小站點CMS的最佳選擇 作者:孫毓波 (AKCMS 作者) SQLite 是一個類似Access的輕量級數據庫系統,但是更

        SQLite數據庫是中小站點CMS的最佳選擇

        作者:孫毓波 (AKCMS 作者)

        SQLite 是一個類似Access的輕量級數據庫系統,但是更小、更快、容量更大,并發更高。為什么說 SQLite 最適合做 CMS (內容管理系統)呢?并不是說其他數據庫不好, Oracle、MySQL、SQLServer 也都是非常優秀的 DBS,只不過他們設計目標不同,特性不同,所以只有更適用某個應用場景,沒有絕對的好壞之分。

        我歸納的中小型站點的CMS的特點如下:

      1. 1、數據量不超過10萬
      2. 2、日頁面訪問量不超過10萬
      3. 3、 一部分網站全部生成靜態頁面,一部分網站實時查詢數據庫動態訪問
      4. 4、 站長不懂技術,不懂得復雜的數據庫維護,只會用 FTP 管理網站
      5. 5 、個人站點基本上是一個人管理,一般情況下只有一個人在訪問后臺,沒有并發
      6. 6、 對數據庫來說是讀多寫少,只有在站長訪問后臺的時候才會寫入
      7. 7、 多運行于虛擬主機,大部分PHP主機均同時支持MySQL,小部分PHP主機需要單獨購買MySQL,PHP+MySQL的主機價格較PHP主機價格高。 (以萬網為例:最便宜的PHP空間780元,最便宜的PHP+MySQL的PHP空間1150元)
      8. 8、 多數中小站點的HTTP服務與MySQL部署在同一服務器上
      9. SQLite 的優點在中小網站CMS應用場景下表現突出:

      10. 1、與MySQL相比,它更徹底的免費,并且沒有任何使用上的限制
      11. 2、非常小巧,PHP5以上版本中無需任何配置即可支持SQLite
      12. 3、無需單獨購買數據庫服務,無服務器進程,配置成本為零
      13. 4、整個數據庫存儲在一個單個的文件中,數據導入導出備份恢復都是復制文件,維護難度為零
      14. 5、讀速度快,在數據量不是很大的情況下速度較快,更重要的是:省掉了一次數據庫遠程鏈接沒有復雜的權限驗證,打開就能操作
      15. SQLite的缺點在中小網站 CMS 應用場景下被規避:

      16. 1、并發低 動態訪問時當訪問量不超過10萬PV的時候,SQLite 超過 Access 的并發能力已經綽綽有余;生成靜態頁后更無需考慮數據庫的并發問題
      17. 2、在大數據量的情況下表現較差 但是中小站點一般情況下數據量不超過10萬,而SQlite 在 100 萬數據量之下表現還不錯,因為省掉了對數據庫服務器的遠程連接甚至會更快
      18. 3、寫入較慢 默認配置下的 SQlite 的寫入速度比MySQL慢了很多,但是 CMS 應用場景的寫入操作較少。在插入新文章的時候基本感受不到慢。集中的寫數據庫操作只有在安裝的時候會出現,不過只出現一次,可以忽略
      19. 4、為已有的表加索引較慢 但是在中小站點CMS中不會有這樣的需求,可以忽略
      20. 5、無法將 MySQL 部署到與前端機不同的服務器上 ,但是中小站點也沒有分開部署的需求
      21. 綜上所述:在中小站點 CMS 的應用場景下 SQLite 能最大限度的降低建站成本,降低維護難度,又很好得規避了自身的缺點。所以我認為未來支持 SQLite 的 CMS 系統一定會大行其道。

        =============
        嵌入式數據庫系統Berkeley DB
        施聰 (javer@163.com), 高級程序員、網絡設計師

        通 常,我們在設計UNIX/LINUX平臺下的應用軟件時,如果數據種類繁多,數據與數據之間關系比較復雜,就會選用一些大型的企業級數據庫系統,如 DB2,ORACLE、SYBASE等,如果軟件規模不大,就傾向選用如MYSQL、POSTGRESQL等中小型數據庫。例如使用PHP/PERL + MYSQL/POSTGRESQL設計網站基本上是一個很常規的做法。但是,當應用軟件管理的數據類型較少(特別注意:這并不是說需要管理的數據量小), 數據管理本身不復雜,且對數據操作要求高效率,則由大名鼎鼎的Berkeley(美國加州大學伯克利分校)開發的 Berkeley DB可能是一個很明智的選擇。

        DB 是一個具有工業強度的嵌入式數據庫系統,數據處理的效率很高。DB功能的穩定性歷經時間的考驗,在大量應用程序中使用便是明證。可以想見,在同等代碼質量 的條件下,軟件的BUG數和代碼的長度是成正比的,相對幾十兆、幾百兆大型數據庫軟件,DB的只有不到500K的大小!

        從實現功能上 看,DB是輕量級數據庫系統,或可稱為"極" 輕量級數據庫系統。但是,我認為不能因此而心存輕視之意,所謂"尺有所短,寸有所長",以絕對角度比較工具之間的好壞是沒有什么意義的,關鍵在于對工具的 選擇和運用(似乎可以參考一下極限編程的思想)。也許,正確的"表達范式"應該是:在當前應用背景下,選擇這種工具是最合適的。
        -----------------------
        作者:肖文鵬 發文時間:2004.04.09
        像 MySQL這類基于C/S結構的關系型數據庫系統雖然代表著目前數據庫應用的主流,但卻并不能滿足所有應用場合的需要。有時我們需要的可能只是一個簡單 的基于磁盤文件的數據庫系統。這樣不僅可以避免安裝龐大的數據庫服務器,而且還可以簡化數據庫應用程序的設計。Berkeley DB正是基于這樣的思想提出來的。

        Berkeley DB簡介

        Berkeley DB是一個開放源代碼的內嵌式數據庫管理系統,能夠為應用程序提供高性能的數據管理服務。應用它程序員只需要調用一些簡單的API就可以完成對數據的訪問 和管理。與常用的數據庫管理系統(如MySQL和Oracle等)有所不同,在Berkeley DB中并沒有數據庫服務器的概念。應用程序不需要事先同數據庫服務建立起網絡連接,而是通過內嵌在程序中的Berkeley DB函數庫來完成對數據的保存、查詢、修改和刪除等操作。

        Berkeley DB為許多編程語言提供了實用的API接口,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同數據庫相關的操作都由 Berkeley DB函數庫負責統一完成。這樣無論是系統中的多個進程,或者是相同進程中的多個線程,都可以在同一時間調用訪問數據庫的函數。而底層的數據加鎖、事務日志 和存儲管理等都在Berkeley DB函數庫中實現。它們對應用程序來講是完全透明的。俗話說:“麻雀雖小五臟俱全。”Berkeley DB函數庫本身雖然只有300KB左右,但卻能夠用來管理多達256TB的數據,并且在許多方面的性能還能夠同商業級的數據庫系統相抗衡。就拿對數據的并 發操作來說,Berkeley DB能夠很輕松地應付幾千個用戶同時訪問同一個數據庫的情況。此外,如果想在資源受限的嵌入式系統上進行數據庫管理,Berkeley DB可能就是惟一正確的選擇了。

        Berkeley DB作為一種嵌入式數據庫系統在許多方面有著獨特的優勢。首先,由于其應用程序和數據庫管理系統運行在相同的進程空間當中,進行數據操作時可以避免繁瑣的 進程間通信,因此耗費在通信上的開銷自然也就降低到了極低程度。其次,Berkeley DB使用簡單的函數調用接口來完成所有的數據庫操作,而不是在數據庫系統中經常用到的SQL語言。這樣就避免了對結構化查詢語言進行解析和處理所需的開 銷。

        from: http://tech.ccidnet.com/art/1060/20040409/101733_1.html

        ==========================
        主流開源數據庫的技術特點點評

        隨著開放源代碼軟件的使用越來越廣泛,像Linux操作系統一樣,開放源代碼數據庫的出現也有其必然性。在當Oracle、IBM、Microsoft、 Sybase 等幾大數據庫廠商在數據庫領域處于壟斷地位的時候,出現了以MySQL、PostgreSQL為代表的開放源代碼的數據庫系統,推動了開源軟件事業的發 展。開源數據庫系統并不是一個新事物,如Postgres(PostgreSQL的前身)已經有20年的發展歷史了,而著名的MySQL今年4月剛剛度過 了其10周年紀念活動。

        1、MYSQL

        MysQL是瑞典的T.c.X公司負責開發和維護的,它是一個真正的多用戶、多線程SQL數據庫服務器。MysQL是以一個客戶機/服務器結構實現其功能 的,它由一個服務器守護程序mysqld和很多不同的客戶程序和庫組成。SQL是一種標準化的語言,它使得存儲、更新和存取信息更容易。MySQL主要特 點是快速、健壯和易用。MySQL的官方發音是“My Ess Que Ell”(不是MY-SEQUEL)。目前MySQL的最新版本是5.0,MySQL的網址是:http://www.mysql.com,MySQL的 標志是一個小海豚。見圖-1。

        圖-1 Mysql 標志

        MySQL的技術特點:

        1. 它使用的核心線程是完全多線程,支持多處理器。

        2. 有多種列類型:1、2、3、4、和8字節長度自有符號/無符號整數、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM類型。

        3. 它通過一個高度優化的類庫實現SQL函數庫并像他們能達到的一樣快速,通常在查詢初始化后不該有任何內存分配。沒有內存漏洞。

        4. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函數(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查詢中混來自不同數據庫的表。

        5. 支持ANSI SQL的LEFT 0UTER JOIN和ODBC。

        6. 所有列都有缺省值。你可以用INSERT插入一個表列的子集,那些沒用明確給定值的列設置為他們的決省值。

        7. MySQL可以工作在不同的平臺上。支持C、C++、Java、Perl、PHP、Python和TCL API。

        MaxDB是2003年SAP公司和MySQL AB公司合作之后SAP DB新的名稱。MaxDB是一款重量級的、獲得SAP R/3認證,適宜于聯機事務處理和聯機分析處理等多種業務類型的高可用性、高可靠性和極具伸縮性的數據庫,支持大容量的用戶和并發業務操作,采用多線程多 進程的服務器設計,支持多處理器的應用,并通過集群和熱部署提供高可靠性,支持TB級的海量數據,支持企業級的數據同步和復制等復雜應用。

        2. PostgreSQL

        PostgreSQL是一種運行在Unix和Linux操作系統(在NT平臺借助Cygnus也可以運行)平臺上的免費的開放源碼的關系數據庫。最早是由 美國加州大學伯克利分校開發的,開始只是作為一個演示系統發表,但是隨著時間的推移,逐步分發,得到很多實際的應用,才逐步流行起來。PostgreSQ 的網址是http://www.postgresql.org/,最新版本是2005年10月4日發布的8.0.4。PostgreSQL的官方發音 是:Post-gres-Q-L。 PostgreSQ的標志是一個大象,見圖-2。

         圖2 PostgreSQL 標志

        PostgreSQL的技術特點:

        1. 支持SQL。作為關系數據庫,它支持SQL89標準也支持部分SQL92大部分功能。

        2. 有豐富的數據類型。許多數據類型是一些商業數據庫都沒有提供的。

        3. 面向對象。它包含了一些面向對象的技術,如繼承和類。

        4. 支持大數據庫,它不同于一般的桌面數據庫,能夠支持幾乎不受限制大小的數據庫,而且性能穩定。

        5. 方便集成web,提供一些接口方便 PHP,Perl等語言操作數據庫。

        6. 事務處理。相對一些其他免費數據庫如MySQL,他提供了事務處理,可以滿足一些商業領域的數據需要。

        7. PostgreSQL運行速度明顯低于MySQL。因為MySQL使用了線程,而PostgreSQL使用的是進程。在不同線程之間的環境轉換和訪問公用的存儲區域顯然要比在不同的進程之間要快得多。

        3. Firebird

        2000年7月,Borland(即現在的Inprise)公司公布了其數據庫產品Interbase的源代碼。Firebird數據庫就是從該數據庫中 派生出來的。當時,Interbase是與客戶/服務器版本的Delphi產品捆綁在一些銷售的。現在,Interbase已經變成了一只開放源碼中的“ 火鳥”。 Firebird 網址是http://firebird.sourceforge.net/ ,最新版本是2005年8月5日發布的1.5.3。的標志是一只“火鳥”,見圖-3。

         圖-3 Firebird 標志

        Firebird的技術特點

        Firebird相對MySQL和PostgreSQL來說比較小,其RPM版本只有3.0MB。這也使其可以稱得上是理想的“嵌入式數據庫”,可用于與 其它應用程序服務器和應用程序捆綁。Firebird具有大部分成熟數據庫所具有的功能,比如支持存儲過程、SQL兼容等。如果用戶有使用DB2或 PostgreSQL的經驗,就會發現Firebird與它們的語法非常相似,數據類型和數據處理方式也很類似。 Firebird的設計思想是小型、快速和最小化的管理。這對于需要一個數據庫用于存儲數據,但又不想花太多時間來調整數據性能的開發人員很適用。實際上 在很多情況下,我們并不需要存儲程序或復雜的表之間的關聯。這時會發現Firebird在大小和功能之間找到了一個理想的平衡點。

        現在有兩個版本的Firebird服務器軟件可供下載,分別是Firebird Super Server和Firebird Classic Server。簡單來說,二者的區別在于設計的方法不同。Super Server使用線程同時為多個客戶連接提供服務,而Classic Server使用的則是Interbase的方法,采用為每個連接提供一個獨立服務器進程的方式。如果想對二者的區別有更多的了解,可查看 http://www.ibphoenix.com/main.nfs?a=ibphoenix& page=ibp_ss_vs_classic。對于“嵌入式數據庫”的用戶,這兩個版本之間沒有太大的區別。從理論上講,如果應用程序的用戶很多,那么 Super Server將是一個較好的選擇。

        4. mSQL

        mSQL(mini SQL)是一個單用戶數據庫管理系統,個人使用免費,商業使用收費。由于它的短小精悍,使其開發的應用系統特別受到互聯網用戶青睞。mSQL(mini SQL)是一種小型的關系數據庫,性能不是太好,對SQL語言的支持也不夠完全,但在一些網絡數據庫應用中是足夠了。由于mSQL較簡單,在運行簡單的 SQL語句時速度比MySQL略快,而MySQL在線程和索引上下了功夫,運行復雜的SQL語句時比mSQL,PostgreSQL等都要快一些。 MSQL的網址是:http://www.hughes.com.au ,最新版本是2005年5月8日發布的3.7。MSQL的標志是一個鹿。見圖-2。

        圖4 mSQL 標志

        mSQL的技術特點:

        安全性方面,mSQL通過ACL文件設定各主機上各用戶的訪問權限,缺省是 全部可讀/寫。mSQL缺乏 ANSI SQL 的大多數特征,它僅僅實現了一個最最少的API,沒有事務和參考完整性。mSQL與Lite(一種類似C的腳本語言,與分發一起發行)緊密結合,可以得到 一個稱為 W3-mSQL的一個網站集成包,它是JDBC、ODBC、Perl和PHP API。

        嵌入式數據庫

        嵌入式數據庫的名稱來自其獨特的運行模式。這種數據庫嵌入到了應用程序進程中,消除了與客戶機服務器配置相關的開銷。嵌入式數據庫實際上是輕量級的,在運 行時,它們需要較少的內存。它們是使用精簡代碼編寫的,對于嵌入式設備,其速度更快,效果更理想。嵌入式運行模式允許嵌入式數據庫通過 SQL 來輕松管理應用程序數據,而不依靠原始的文本文件。嵌入式數據庫還提供零配置運行模式,這樣可以啟用其中一個并運行一個快照。

        5. Berkeley DB

        像MySQL這類基于C/S結構的關系型數據庫系統雖然代表著目前數據庫應用的主流,但卻并不能滿足所有應用場合的需要。有時我們需要的可能只是一個簡單 的基于磁盤文件的數據庫系統。這樣不僅可以避免安裝龐大的數據庫服務器,而且還可以簡化數據庫應用程序的設計。Berkeley DB正是基于這樣的思想提出來的。官方網址是:http://www.sleepycat.com/ ,最新版本是2005年8月5日發布的4.3。的標志是一只“貓”,見圖-4。

        圖5 Berkeley DB 標志

        Berkeley DB的技術特點:

        Berkeley DB是一個開放源代碼的內嵌式數據庫管理系統,能夠為應用程序提供高性能的數據管理服務。應用它程序員只需要調用一些簡單的API就可以完成對數據的訪問 和管理。與常用的數據庫管理系統(如MySQL和Oracle等)有所不同,在Berkeley DB中并沒有數據庫服務器的概念。應用程序不需要事先同數據庫服務建立起網絡連接,而是通過內嵌在程序中的Berkeley DB函數庫來完成對數據的保存、查詢、修改和刪除等操作。

        Berkeley DB為許多編程語言提供了實用的API接口,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同數據庫相關的操作都由 Berkeley DB函數庫負責統一完成。這樣無論是系統中的多個進程,或者是相同進程中的多個線程,都可以在同一時間調用訪問數據庫的函數。而底層的數據加鎖、事務日志 和存儲管理等都在Berkeley DB函數庫中實現。它們對應用程序來講是完全透明的。俗話說:“麻雀雖小五臟俱全。”Berkeley DB函數庫本身雖然只有300KB左右,但卻能夠用來管理多達256TB的數據,并且在許多方面的性能還能夠同商業級的數據庫系統相抗衡。就拿對數據的并 發操作來說,Berkeley DB能夠很輕松地應付幾千個用戶同時訪問同一個數據庫的情況。此外,如果想在資源受限的嵌入式系統上進行數據庫管理,Berkeley DB可能就是惟一正確的選擇了。

        Berkeley DB作為一種嵌入式數據庫系統在許多方面有著獨特的優勢。首先,由于其應用程序和數據庫管理系統運行在相同的進程空間當中,進行數據操作時可以避免繁瑣的 進程間通信,因此耗費在通信上的開銷自然也就降低到了極低程度。其次,Berkeley DB使用簡單的函數調用接口來完成所有的數據庫操作,而不是在數據庫系統中經常用到的SQL語言。這樣就避免了對結構化查詢語言進行解析和處理所需的開 銷。

        6. SQLite

        SQLite 是 D. Richard Hipp 用 C 語言編寫的開源嵌入式數據庫引擎。它是完全獨立的,不具有外部依賴性。它是作為 PHP V4.3 中的一個選項引入的,構建在 PHP V5 中。SQLite 支持多數 SQL92 標準,可以在所有主要的操作系統上運行,并且支持大多數計算機語言。SQLite 還非常健壯。其創建者保守地估計 SQLite 可以處理每天負擔多達 100,00 次點擊率的 Web 站點,并且 SQLite 有時候可以處理 10 倍于上述數字的負載。SQLite 的網址是,最新版本是2005年9月24日發布的3.2.7 。SQLite的標志是一只羽毛,見圖-5。

        圖6 SQLite標志

        SQLite的技術特點:

        SQLite 對 SQL92 標準的支持包括索引、限制、觸發和查看。SQLite 不支持外鍵限制,但支持原子的、一致的、獨立和持久 (ACID) 的事務(后面會提供有關 ACID 的更多信息)。這意味著事務是原子的,因為它們要么完全執行,要么根本不執行。事務也是一致的,因為在不一致的狀態中,該數據庫從未被保留。事務還是獨立 的,所以,如果在同一時間在同一數據庫上有兩個執行操作的事務,那么這兩個事務是互不干擾的。而且事務是持久性的,所以,該數據庫能夠在崩潰和斷電時幸免 于難,不會丟失數據或損壞。SQLite 通過數據庫級上的獨占性和共享鎖定來實現獨立事務處理。這意味著當多個進程和線程可以在同一時間從同一數據庫讀取數據,但只有一個可以寫入數據。在某個進 程或線程向數據庫執行寫入操作之前,必須獲得獨占鎖定。在發出獨占鎖定后,其他的讀或寫操作將不會再發生。

        總結:目前的開源數據庫還不能在功能和處理能力方面追上商業級產品,但價格的侵蝕力無法回避,開源數據庫迅速增長的市場份額甚至讓數據庫領域的三巨 頭,Oracle、IBM、微軟都感到忐忑不安。開源數據庫的用戶在增長,并正在被越來越多的用戶所采用。在嵌入式數據庫領域,開源數據庫優勢更加明顯。 分析師稱開放源碼正在迅速被數據庫技術所采用。開放源碼“從2000年被懷疑到2005年已經發展成為全球的主流技術”。低成本甚至免費的開源數據庫時代 即將來臨。

        =============
        將你的網站從MySQL改為PostgreSQL

        原著:Nathan Matias 翻譯:處處
        我的站點最初是采用PHP驅動,由MySQL數據庫支持的方案,這在當時是一個明智的方案。在2001年夏天,我將我的數據庫換成了PostgreSQL(有時也簡稱為Postgres)。
        這個教程分為兩部分,第一部分講述了我進行這種轉換的動機,并一步步地解釋了如何將已存在有MySQL的數據轉換到Postgres中。第二部分將會解釋如何根據新的數據庫系統對PHP進行相應的調整。
        轉換的動機
        我第一次了解Postgres是在PHPBuilder網站的一篇文章中。這篇文章將Postgres和MySQL進行了比較,當時我正在使用 MySQL。但是,當我閱讀了這篇文章后,我對Postgres著了迷 -- 但是當時我還沒有想到對我的網站進行重新的設計。
        我繼續使用MySQL,因為我的主機提供商只能提供MySQL的支持,這是我所無法改變的。直到有一天,主機提供商的主機崩潰了。我立即換了一個主機提供 商,與原來的那個相比,新的主機提供商有很多不同,他們在安全性和穩定性方面對我作出了更多的承諾。新公司試圖說服我使用Postgres,因為 Postgres要比MySQL來得更穩定,但是我當時沒有接受這個建議,因為我的網站已經根據MySQL完成了全部的編碼工作。他們只好專門為我的站點 安裝了MySQL。于是問題開始了。
        我的第一個工作是將舊服務器上的MySQL的數據拷貝到新的主機上。首先,我將已有的數據dump到一個SQL文件中,然后在新的主機上導入這個SQL文 件。在處理這個數千行的文件時,MySQL迅速地崩潰了。重啟MySQL后,其中大概只有一半數據成功地導入了,而且MySQL只能間歇性地工作。最后, 他們不得不刪除了已經導入的信息讓我再試一次。MySQL再次崩潰。這種情況重復了好幾次,直到最終我決定將我的SQL文件分割成幾塊。我不得不又試了幾 次,最后終于將絕大多數的數據都成功地導入到新的MySQL服務器中。一切都好了,我總算松了一口氣。
        在下面的幾個月中,MySQL幾乎每兩周都要崩潰一次,其中最慘痛的一次是在2001年6月底。這一次,存儲在MySQL中的數據完全被毀壞了。我有一個 SQL的備份文件,但是因為上次向MySQL中導入大量數據的痛苦的經歷,這一次我再也不想通過這個備份恢復數據了。這時,公司再次建議我對我的網站進行 轉向,使用Postgres。由于MySQL的失敗,最終我接受了這個建議。
        將數據從MySQL轉移到Postgres中
        將數據從MySQL轉移到Postgres是一個不大的挑戰,因為Postgres比MySQL支持了更多的SQL的標準格式,在POstgres中直接使用SQL的dump結果是不可能的。但是,SQL語法相當相似,因此對于我來說,這并沒有花費太多的時間。

        對MySQL的Dump結果進行轉換
        首先,要求你的主機提供商為你的帳號建立一個數據庫。和MySQL數據庫一樣,Postgres的數據庫也由一系列包含實際數據的數據表組成。然后,使用mysqldump命令為你的MySQL數據庫做一個dump文件。
        mysqldump -u username -p databasename > sqldump.txt
        使用FTP將整個dump文件下載下來。現在在你的計算機上有了這個SQL文件,你可以將其轉換成Postgres可以導入的文件。
        首先,從dump文件中剪切所有的MySQL的CREATE TABLE查詢,并將其粘貼到一個單獨的文本文件中。下一步是使用Postgres可以理解的語言重新對數據表進行定義。
        Postgres建立表的SQL和MySQL非常類似,但不完全一樣。下面是一個例子:
        CREATE TABLE practicetable
        {
        someID SERIAL,
        time TIMESTAMP DEFAULT now(),
        name VARCHAR(50),
        address VARCHAR(50),
        city VARCHAR(50),
        state VARCHAR(2),
        country VARCHAR(3) DEFAULT 'USA',
        postlcode VARCHAR(15),
        age smallint,
        lattitude real,
        longitude real,
        somebool boolean,
        message textitem
        };
        在一個Postgres的表定義中,字段名后面必須跟著字段類型。在上面的例子中我們給出了一些最普通的字段類型,你還可以在有關Postgres數據類 型的文檔中找到全部的字段類型的列表。對于不同的任務,Postgres在字段類型方面有多種選擇,并可以存儲各種類型的數據,從Internet地址到 貨幣信息到幾何對象的定義。這兒簡要地介紹最常用的幾種數據類型。
        SERIAL類型的字段和MySQL中的自增唯一ID等價。當你在你的數據表中定義了一個SERIAL類型的列后,SERIAL的自增功能會被自動添加到 數據庫。當自增功能不能適應實際需求時,我們可以自定義唯一ID的邏輯。從MySQL向Postgres轉輸數據時,默認的功能已經足夠了。
        和字面上的意義一樣VARCHAR類型是一個可變長度的文本字段。字段的長度由括號中的數值定義。例如,VARCHAR(5)定義了一個最多可包含5個字符的文本字段。
        SMALLINT、INT和BIGINT用來定義整型字段。SMALLINT字段可存儲數值范圍為-32768到+32767(實際的范圍可能會稍微受到 你的計算機類型的影響,上面的范圍適用于最普通的系統)。INT字段可存儲數值范圍為-2147483648到+2147483647。而BIGIN字段 類型可存儲任何更大的整數,它沒有范圍的限制。
        REAL字符類型是一個包含十進制小數的實數。它可以精確到小數點后六位。DOUBLE PRECISION字段與此相類似,但是它可以精確到小數點后15位。
        BOOLEAN字段是真或假、1或0。這和MySQL中相似。
        TIMESTAMP字段和MySQL中的情況類型。每次記錄更新時,timestamp被更新為當前的日期和時間。Postgres的時間字段還可以包含時區信息。有關Postgres時間數據的更復雜的應用,請參看PostgreSQL文檔的日期和時間。

        建立數據表
        當你使用SQL文件在Postgres中建立數據表時,請檢查在每一個CREATE TABLE查詢的最后是不是都以分號結束 - 這對于Postgres是不可省略的。使用telnet這樣的工具連接到你的Web主機,然后用下面的方法建立數據表。
        首先,用一個文本編輯器打開你的表定義文件。然后登錄到你的主機,并輸入psql運行Postgres交互終端。默認的用戶論證方式是使用你的 telnet/FTP用戶名作為你的Postgres帳號。這使得不需要你輸入用戶名和口令,Postgres就能自動鑒別你的身份。你的Web主機也許 不是采用的這種方式,在這種情況下,你需要為psql程序帶入參數:psql -d databasename -U username -W。-d用來指定數據庫,-U指定用戶名,而-W要求psql提示你輸入一個口令。
        當你成功地運行了psql以后,將每個CREATE TABLE查詢單獨地粘貼到psql中并按回車鍵。如果在你的SQL語句中有錯誤,psql會給出相應提示。通過逐一地加入每一個表,你會得到每一個表的調試信息,這樣做起來相當簡單。
        如果,在你輸入了表的定義之后,你發現遺漏了一兩個字段,有兩種方法能解決這個問題。你可以使用ALTER TABLE命令,或者是使用DROP TABLE刪除這張表,然后重新生成。如果你使用第二種方法,你會看到一個警告以驗證你是不是真的想要刪除表。
        要使用DROP TABLE命令,只需要輸入DROP TABLE practicetable;。這會刪除我們剛才定義的表。但是當你對這個表重新進行定義時,你會發現一個錯誤。這是因為在刪除一個表時并不相應地刪除這 個表中SERIAL類型字段的序列。這些遺留下來的序列會在你重建表時引起錯誤。要解決這個問題,你必須在刪除表之前使用DROP SEQUENCE sequencename;刪除相應的序列。而且有件很討厭的事,那就是序列名并不就是SERIAL列的名字。當你定義一個SERIAL類型的字段 時,Postgres會自動生成這樣的序列名:tablename_colname_seq。在現在的這種情況下,DROP SEQUENCE 語句將會是這樣的:DROP SEQUENCE practicetable_someID_seq;。現在你就可以刪除這張表并重新生成它了。
        在添加完這些表之后,你可以輸入z對這些表進行復查。而輸入q將會退出psql。現在剩下來的就是準備輸入到Postgres中的數據了。

        處理Dump文件
        因為MySQL保留了絕大多數的SQL語言的標準,從一個SQL的dump文件中導出實際數據并不是太困難的。然而,在我們使用Postgres對這個文件進行處理前,我們還是需要作一些編輯工作。
        對于數據記錄,在MySQL和Postgres之間的主要區別是對引號的處理。在Postgres中,字符串變量(包含文本的變量)必須由兩個單引號引 出。而在MySQL中,你還可以使用雙引號,但是幸運的是,在mysqldump程序中程序中使用的是單引號,這剛好與Postgres一致。然 而,MySQL和Postgres還有一個地方不同,那就是對字符串中出現的引號的處理。在MySQL中使用"",而在Postgres中使用"。使用你 的文本編輯器并通過替換功能將其中所有的""替換為"。有趣的是,Postgres和MySQL都使用'來表示單引號,這使得我們免去了一個麻煩。

        導入到Postgres中
        當你整理好SQL dump文件后,將這個文件上載到你的Web主機中,就如同你當初建表那樣登錄到主機,轉到SQL dump文件存放的目錄。啟動psql,不過這次你必須使用另一個命令行參數:psql -f sqldump.txt,這兒的sqldump.txt就改為你的SQL dump文件的文件名。這個命令會將全部的SQL文件導入到適當的Postgres數據表中。在此之前,你也許還需要其它的一些命令行參數以使得psql 可以對你的身份進行驗證。如果發生了錯誤,psql會告訴這是由什么引起的。找到文件中的這一部分,找到問題并手工解決它。我當初是沒有遇到任何問題,我 差不多準備結束工作了。但是,很快我注意到另一個問題。
        在我開始使用我的新的Postgres驅動的站點時,我偶然地發現MySQL和Postgres之間另一個不兼容的地方。SERIAL類型的自增字段所使 用的Postgres的序列,它從1開始,并在每次有一個SERIAL類型字段的記錄插入時加一。然而,在我導入MySQL的dump文件時,這個 dump文件中的SQL將這個值定義為整型主鍵。我當時的情況是,我有一個到唯一主鍵已經到了60,而序列仍然是1。于是我的每一個插入命令都沒法成功, 因為根據序列產生的不是唯一ID。我當時用了一個很笨的方法解決這個問題,那就是運行了60次INSERT語句以將序列調整為適當的值,但是后來有一個熟 悉Postgres的朋友教給我一個好方法。下面就是他所講的方法:
        使用telnet這樣的終端程序連接到你的主機。然后啟動psql程序。首先,確定表中ID的最大值。這可以用SELECT fieldname FROM tablename WHERE fieldname=MAX(fieldname);。然后使用DROP SEQUENCE table_colname_seq;刪除有問題的序列,這兒table是表名,而colname是SERIAL字段的列名。然后使用CREATE SEQUENCE table_colname_seq START 61;重建序列,當然這兒的61應根據你的實際情況進行修改。

        安裝一個圖形界面的工具
        當我成功地將數據導入到Postgres后,我還需要讓我的不懂Unix的伙伴能夠操作數據庫中的數據。當初的MySQL我是使用的 phpMyAdmin,這是一個很好用的工具,它能夠在線的顯示和編輯數據庫。幸運的是,已經有了“Postgres版本”的phpMyAdmin,那就 是phpPgAdmin。
        phpPgAdmin的安裝非常簡單。首先,從phpPgAdmin網站下載最新的版本,然后將其放到你的Web主 機上的你所能訪問的地方。使用telnet這樣的工具登陸到主機。到phpPgAdmin.tar.gz文件所在的目錄,輸入tar -xzvf phpPgAdmin.tar.gz對程序進行解壓(這里只是舉個例子,你的文件名可能不一樣)。下面一件事就是將解壓生成的新的子目錄移到合適的地方, 并閱讀README文件。
        最后,用你的Web主機上的文本編輯器打開config.inc.php。這個文件中包含了對phpPgAdmin的配置。將這個文件配置好你就可以通過 瀏覽器使用PhpPgAdmin了,它會提示你輸入用戶名并登錄,通過這個程序你管理你的數據庫將變得非常簡單。

        結語
        與MySQL相比,Postgres更加穩定,更加可靠,可以應付更大的數據。按照上面的提示,你可以使用SQL的dump文件將數據從MySQL轉到 Postgres。如果在這個過程中你遇到什么困難,從Postgres網站你可以找到一些非常有用的文檔資源。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        SQLite、BerkeleyDB、PostgreSQL、MySQL、Firebird、mSQL

        SQLite、BerkeleyDB、PostgreSQL、MySQL、Firebird、mSQL:SQLite數據庫是中小站點CMS的最佳選擇 作者:孫毓波 (AKCMS 作者) SQLite 是一個類似Access的輕量級數據庫系統,但是更 SQLite數據庫是中小站點CMS的最佳選擇 作者:孫毓波 (AKCMS 作者) SQLite 是一個類似Access的輕量級數據庫系統,但是更小
        推薦度:
        標簽: SQLite mysql mys
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费观看亚洲人成网站| 亚洲精品福利视频| 日韩电影免费在线观看视频 | 亚洲人成网站18禁止久久影院| 久久久无码精品亚洲日韩按摩| 亚洲午夜电影一区二区三区| 中文字幕成人免费视频| 国产一级理论免费版| 久久久亚洲AV波多野结衣| 美女羞羞免费视频网站| 免费国产99久久久香蕉| 成人免费视频一区二区三区| 奇米影视亚洲春色| 亚洲va久久久久| 久久精品无码精品免费专区| 日本免费一二区在线电影| 国产成人 亚洲欧洲| 国产亚洲午夜高清国产拍精品| 亚洲av片不卡无码久久| 你好老叔电影观看免费| 免费毛片网站在线观看| 无码人妻丰满熟妇区免费| 亚洲高清最新av网站| 亚洲AV成人无码久久WWW| 91网站免费观看| 国产国拍亚洲精品mv在线观看| 黄页网站在线视频免费| 亚洲色偷偷偷鲁综合| 在线观看亚洲免费| 中文亚洲AV片不卡在线观看 | 亚洲宅男精品一区在线观看| 国产色无码精品视频免费| 亚洲国产精品毛片av不卡在线 | 免费一级毛suv好看的国产网站| 国产大片免费网站不卡美女 | 国内精品免费麻豆网站91麻豆 | 亚洲国产精品成人精品无码区在线| 88av免费观看入口在线| 亚洲国产成人无码AV在线| 久久久久国色AV免费观看性色| 久久精品国产亚洲精品2020|