最簡單的就是使用grep,但是在這麼多眾多使用者當中grep是乙個乙個比較的,拿著指定指定的字串逐行逐行進行掃瞄,那我們掃瞄個10行50行沒有問題,但是掃瞄100萬行所耗的時間、資源太大了並且速度會很慢。事實上我們找的就是使用者本身,也沒有必要每一行中的每乙個字元都去比較一下,只需要比較某一行當中的那一段就可以了。首先我們可以將這個檔案切割成段,切成各個不同的字段,只拿其中乙個字段進行比較就可以了,這是第一種。
第二種,我們只比較乙個字段,但是範圍仍然很大,從上到下挨個比較也是很麻煩的,如何加速這個過程呢?可以排序,排序後通過二分法查詢。最終平均下來大概需要查詢14次左右。但這有乙個前提,檔案需要提前排序,但使用者檔案不一定是按使用者名稱存放的,此時又得按使用者查詢,它又不一定是按照使用者名稱排序的,如何做?只需將所有使用者名稱提出來單獨建乙個檔案即可,再建乙個檔案,只存放使用者名稱,並且這個檔案是自動建立的,而且還是有序的。再進行查詢時,只需要針對這個檔案尋找即可。若想再找與這個使用者名稱有關的其它資訊,只需通過乙個指標指向實際資料所在的位置即可。而這個幫助我們查詢的檔案稱為索引檔案。
二分法是一種查詢方法,但這種需要查詢14次的方法太慢了,我們可以使用稀疏索引,如b+樹索引,b+樹索引結合使用稠密索引和稀疏索引來完成對檔案的索引,使得一般情況下我們平均找的每乙個資料4次查詢就可以了。但還有問題就是,若100萬的使用者資訊放在乙個文字檔案中,如何建立索引呢?是根據使用者名稱建立,還是使用者id建立呢?如果使用使用者名稱建立下一次希望通過id查詢怎麼辦?所以可能乙個索引還不夠,因為索引查詢標準不一樣,而查詢標準稱為搜尋碼(搜尋關鍵字)。因此索引應該跟搜尋碼相匹配,那麼誰去管理索引呢嗎,若又新增(刪除)了乙個使用者,索引也需要新增(刪除),這就需要開發乙個應用程式完成兩個檔案之間的關聯性,不然得手動維護兩個檔案,非常繁瑣。這個程式能夠根據指定的標準自動建立對應欄位的索引,並且新增(刪除)資料時能自動新增(刪除)索引,它能幫我們維護索引關聯性。
但此時有了維護索引關聯性的程式後,查詢操作還需由對應的應用程式自己通過演算法開發一段程式。這是非常繁瑣的。因此可以將查詢演算法做成乙個公共模組,誰要用拿來即可。也可以將查詢演算法做進管理軟體中,讓管理軟體實現,這是兩種不同的管理機制。
任何增刪改操作之前其實是都需要做查詢操作的,而每一次更新都需要查詢,對程式來說挺麻煩的,因此可以這些功能放進這個管理程式中。
因此程式在進行增刪改查之前需要有乙個通訊標準,約定好操作的表示方式、資料返回後的格式;tcp/ip協議可以實施,但功能的實現需要程式實現。web服務叫http服務,得有實現http功能的軟體如apache才可以。
dbms:(database management system,資料庫管理系統)專門負責資料管理的工具;
乙個檔案儲存在磁碟上是一種資料流(二進位製碼),對使用者來講,如/etc/passwd是乙個文字檔案,它有一行一行的資料,那在使用者看來和磁碟看來不是一碼事,因此這是兩種不同的展現方式。作為系統管理員來講,就是負責提供這樣一種機制讓使用者的資料能夠儲存下來為一種格式,而最終展示的又是另外一種格式。作為系統工程師來講這兩種格式都能看到。
而把使用者能看到的結果稱為使用者檢視。而磁碟真正儲存的結果的稱為物理檢視。
那麼若資料量非常大,該如何組織?
以使用者檢視為例:
資料的組織結構
層次型結構(有上下級關係)
網狀型結構
關係型結構
rdbms(relational database management system,關係型資料庫管理系統):能夠負責將使用者的資料組織成以表的方式來表示並且能夠幫我們去維護這些表和表之間關係的這麼乙個軟體。
乙個rdbms應該具備的功能:
1、資料庫建立、刪除、修改(既然要提供資料,那麼資料庫中需要包含多張表,表和表直接有關係,庫裡面還有索引以方便使用者查詢)
2、建立表、刪除表、修改表
3、索引的建立、刪除
4、使用者和許可權的管理
5、資料增、刪、改
6、資料的查詢
上述功能都需要通過命令來完成,而這些命令本身從它完成的意義上可以分為三類:
dml(date manapulate language,資料操作語言)
insert、replace、update、delete
ddl(data defination language,資料定義語言)
create、alter、drop
dcl(data control language,資料控制語言)
grant、revoke
select
常見的rdbms:
egresql(世界上第一款關係型資料庫,加州大學伯克利分校研發)
db2(ibm公司的)
早期世界著名的三大資料庫:oracle、sybase(sybase公司的)、infomix(infomix公司的,被oracle收購)
sql server(早期由sysbase和microsoft共同開發的,是sysbase的另外乙個變種,只能執行在windows,效能和資料安全性都很一般)
mysql、postgresql(在egresql基礎上做的二次開發並開源出來,簡稱為片給pgsql),enterprisedb(有一家商業公司以企業級的視角重新包裝postgresql)
mariadb(mysql作者利用早些年mysql的開源版本開發的)
mysql早先是非常小的資料庫,連sql介面都沒有,後來mysql的作者開發了sql介面。
perconna公司組織了一大幫的程式設計師對mysql進行了優化和改進,改進後重新發布,經過優化後的mysql效能比原來版本好很多。並且軟體本身不收費只賣服務
世界上早期著名的公司:
oracle(軟體商)
ibm(軟硬體商)
sun(軟硬體商):因為沒有自己的資料庫,後來買了mysql
oracle後來收購了sun,與ibm紅藍兩陣營形成對抗之勢。
bea公司:主要是提供weblogic,被oracle收購,83億美元。
peoplesoft:提供關係型管理軟體的公司,被oracle收購,128億美元。
阿里巴巴去ioe化:
i:ibm的小型機
o:oracle
e:emc(世界級專業做儲存裝置的(做硬體的),如raid、網路儲存,昂貴但效能非常好)的儲存裝置
所以資料安全性很重要,而且資料業務很重要不能中斷了,所以oracle都放在emc上,而oracle要執行需要大量的cpu的執行能力需要執行在ibm的小型機上。
去ioe後依靠linux提供一大堆pc機集群來提供海量使用者的請求,把資料放在由眾多pc機組成的儲存集群上,而儲存集群上執行的是經過自己改寫後的mysql。最後發現比原來效能更強。
openoffice:sun的一套開源產品,oracle收購後被商業化
libreoffice:openoffice的作者開發的,某些效能比openoffice更先進
關係型資料庫管理系統儘管有這樣那樣的好處,但是由於關係型資料庫設計本身定義了很多規範叫正規化,如:第一正規化、第二正規化,這些正規化極大的束縛了關係型資料庫,使得關係型資料庫一次查詢為了滿足正規化,盡可能降低冗餘度,設計了n個表,將來要發起乙個大的查詢時,必須要把多個表關聯起來才能查詢,而且表關聯需要從記憶體中完成,那就意味著需要把資料從磁碟讀入記憶體,連線起來才能完成查詢,非常慢。於是現在的資料庫設計就反關係化了。
反關係模型:(不再滿足關係型資料庫的特性了)nosql(非關係性資料庫,不再滿足於關係模型的處理,而是根據業務處理的需要關注讀寫效能,它們也在一定程度上滿足資料管理的需求,nosql只是一種技術,它不是一種軟體(與sql乙個道理))
常用nosql:
mongodb(文件資料庫)
redis(快取(記憶體)資料庫)
hbase(能夠把在自我內部實現資料管理的非關係性資料庫,是乙個稀疏的基於鍵值對的資料庫)
mysql資料庫概念 Mysql及資料庫的基礎概念
dbms 資料庫管理系統層次模型 網狀模型 關係模型 rdbms 關係型資料庫管理系統 檔案儲存 資料的冗餘和不一致性難以解決 當資料量很大時,檔案儲存的訪問很困難 當資料在不同的檔案時,可能會造成資料的格式不一致,及資料太過於分散造成資料孤立 資料的完整性問題 如兩個銀行之間轉錢過程 現故障,要保...
oracle資料庫及mysql資料庫分頁
oracle分頁的sql select from select pager.rownum as rn from select from emp where 1 1 order by empno pager where rn between startindex and endindex starti...
mysql資料庫備份及恢復
1 備份 匯出資料庫 mysqldump u 使用者名稱 p 資料庫名 匯出的檔名 範例 mysqldump uroot p abc abc.sql 匯出資料庫abc到abc.sql檔案 提示輸入密碼時,輸入該資料庫使用者名稱的密碼 如果匯出單張表的話在資料庫名後面輸入表名即可 如果提示lockta...