當前位置:首頁 » 操作系統 » 資料庫學習筆記

資料庫學習筆記

發布時間: 2023-02-14 14:40:22

『壹』 一份難得的資料庫市場分析報告

目錄

- 資料庫分類維度:關系型/非關系型、交易型/分析型

- Nosql資料庫的進一步分類

- OLTP市場規模:關系型資料庫仍占營收大頭

- 資料庫市場份額:雲服務和新興廠商主導NoSQL

- 開源資料庫 vs. 商業資料庫

- 資料庫三大陣營:傳統廠商和雲服務提供商

最近由於時間原因我寫東西少了,在公眾號上也轉載過幾篇搞資料庫朋友的大作。按說我算是外行,沒資格在這個領域品頭論足,而當我看到下面這份報告時立即產生了學習的興趣,同時也想就能看懂的部分寫點心得體會分享給大家。

可能本文比較適合普及性閱讀,讓資料庫領域資深的朋友見笑了:)

資料庫分類維度:關系型/非關系型、交易型/分析型

首先是分類維度,上圖中的縱軸分類為Relational Database(關系型資料庫,RDBMS)和Nonrelational Database (非關系型資料庫,NoSQL),橫軸的分類為Operational(交易型,即OLTP)和Analytical(分析型,即OLAP)。

按照習慣我們先看關系型資料庫,左上角的交易型類別中包括大家熟悉的商業資料庫Oracle、MS SQL Server、DB2、Infomix,也包括開源領域流行的MySQL(MariaDB是它的一個分支)、PostgreSQL,還有雲上面比較常見的SQL Azure和Amazon Aurora等。

比較有意思的是,SAP HANA正好位於交易型和分析型的中間分界處,不要忘了SAP還收購了Sybase,盡管後者今天不夠風光了,而早年微軟的SQL Server都是來源於Sybase。Sybase的ASE資料庫和分析型Sybase IQ還是存在的。

右上角的分析型產品中包括幾款知名的列式數據倉庫Pivotal Greenplum、Teradata和IBM Netezza(已宣布停止支持),來自互聯網巨頭的Google Big Query和Amazon RedShift。至於Oracle Exadata一體機,它上面運行的也是Oracle資料庫,其最初設計用途是OLAP,而在後來發展中也可以良好兼顧OLTP,算是一個跨界產品吧。

再來看非關系型資料庫,左下角的交易型產品中,有幾個我看著熟悉的MongoDB、Redis、Amazon DynamoDB和DocumentDB等;右下角的分析型產品包括著名的Hadoop分支Cloudera、Hortonworks(這2家已並購),Bigtable(來自Google,Hadoop中的HBase是它的開源實現)、Elasticsearch等。

顯然非關系型資料庫的分類要更加復雜,產品在應用中的差異化也比傳統關系型資料庫更大。Willian Blair很負責任地對它們給出了進一步的分類。

NoSQL資料庫的進一步分類

上面這個圖表應該說很清晰了。非關系型資料庫可以分為Document-based Store(基於文檔的存儲)、Key-Value Store(鍵值存儲)、Graph-based(圖資料庫)、Time Series(時序資料庫),以及Wide Cloumn-based Store(寬列式存儲)。

我們再來看下每個細分類別中的產品:

文檔存儲 :MongoDB、Amazon DocumentDB、Azure Cosmos DB等

Key-Value存儲 :Redis Labs、Oracle Berkeley DB、Amazon DynamoDB、Aerospike等

圖資料庫 :Neo4j等

時序資料庫 :InfluxDB等

WideCloumn :DataStax、Cassandra、Apache HBase和Bigtable等

多模型資料庫 :支持上面不只一種類別特性的NoSQL,比如MongoDB、Redis Labs、Amazon DynamoDB和Azure Cosmos DB等。

OLTP市場規模:關系型資料庫仍占營收大頭

上面這個基於IDC數據的交易型資料庫市場份額共有3個分類,其中深藍色部分的關系型資料庫(RDBMS,在這里不統計數據挖掘/分析型資料庫)占據80%以上的市場。

Dynamic Database(DDMS,動態資料庫管理系統,同樣不統計Hadoop)就是我們前面聊的非關系型資料庫。這部分市場顯得小(但發展勢頭看好),我覺得與互聯網等大公司多採用開源+自研,而不買商業產品有關。

而遵循IDC的統計分類,在上圖灰色部分的「非關系型資料庫市場」其實另有定義,參見下面這段文字:

資料庫市場份額:雲服務和新興廠商主導NoSQL

請注意,這里的關系型資料庫統計又包含了分析型產品。Oracle營收份額42%仍居第一,隨後排名依次為微軟、IBM、SAP和Teradata。

代表非關系型資料庫的DDMS分類中(這里同樣加入Hadoop等),雲服務和新興廠商成為了主導,微軟應該是因為雲SQL Server的基礎而小幅領先於AWS,這2家一共占據超過50%的市場,接下來的排名是Google、Cloudera和Hortonworks(二者加起來13%)。

上面是IDC傳統分類中的「非關系型資料庫」,在這里IBM和CA等應該主要是針對大型機的產品,InterSystems有一款在國內醫療HIS系統中應用的Caché資料庫(以前也是運行在Power小機上比較多)。我就知道這些,餘下的就不瞎寫了。

開源資料庫 vs. 商業資料庫

按照流行度來看,開源資料庫從2013年到現在一直呈現增長,已經快要追上商業資料庫了。

商業產品在關系型資料庫的佔比仍然高達60.5%,而上表中從這列往左的分類都是開源占優:

Wide Cloumn:開源佔比81.8%;

時序資料庫:開源佔比80.7%;

文檔存儲:開源佔比80.0%;

Key-Value存儲:開源佔比72.2%;

圖資料庫:開源佔比68.4%;

搜索引擎:開源佔比65.3%

按照開源License的授權模式,上面這個三角形越往下管的越寬松。比如MySQL屬於GPL,在互聯網行業用戶較多;而PostgreSQL屬於BSD授權,國內有不少資料庫公司的產品就是基於Postgre哦。

資料庫三大陣營:傳統廠商和雲服務提供商

前面在討論市場份額時,我提到過交易型資料庫的4個巨頭仍然是Oracle、微軟、IBM和SAP,在這里William Blair將他們歸為第一陣營。

隨著雲平台的不斷興起,AWS、Azure和GCP(Google Cloud Platform)組成了另一個陣營,在國外分析師的眼裡還沒有BAT,就像有的朋友所說,國內互聯網巨頭更多是自身業務導向的,在本土發展公有雲還有些優勢,短時間內將技術輸出到國外的難度應該還比較大。(當然我並不認為國內缺優秀的DBA和研發人才)

第三個陣容就是規模小一些,但比較專注的資料庫玩家。

接下來我再帶大家簡單過一下這前兩個陣容,看看具體的資料庫產品都有哪些。

甲骨文的產品,我相對熟悉一些的有Oracle Database、MySQL以及Exadata一體機。

IBM DB2也是一個龐大的家族,除了傳統針對小型機、x86(好像用的人不多)、z/OS大型機和for i的版本之外,如今也有了針對雲和數據挖掘的產品。記得抱枕大師對Informix的技術比較推崇,可惜這個產品發展似乎不太理想。

微軟除了看家的SQL Server之外,在Azure雲上還能提供MySQL、PostgreSQL和MariaDB開源資料庫。應該說他們是傳統軟體License+PaaS服務兩條腿走路的。

如今人們一提起SAP的資料庫就想起HANA,之前從Sybase收購來的ASE(Adaptive Server Enterprise)和IQ似乎沒有之前發展好了。

在雲服務提供商資料庫的3巨頭中,微軟有SQL Server的先天優勢,甚至把它移植到了Linux擁抱開源平台。關系型資料庫的創新方面值得一提的是Amazon Aurora和Google Spanner(也有非關系型特性),至於它們具體好在哪裡我就不裝內行了:)

非關系型資料庫則是Amazon全面開花,這與其雲計算業務發展早並且占據優勢有關。Google當年的三篇經典論文對業界影響深遠,Yahoo基於此開源的Hadoop有一段時間幾乎是大數據的代名詞。HBase和Hive如今已不再是人們討論的熱點,而Bigtable和BigQuery似乎仍然以服務Google自身業務為主,畢竟GCP的規模比AWS要小多了。

最後這張DB-Engines的排行榜,相信許多朋友都不陌生,今年3月已經不是最新的數據,在這里列出只是給大家一個參考。該排行榜幾乎在每次更新時,都會有國內資料庫專家撰寫點評。

以上是我周末的學習筆記,班門弄斧,希望對大家有幫助。

參考資料《Database Software Market:The Long-Awaited Shake-up》

https://blocksandfiles.com/wp-content/uploads/2019/03/Database-Software-Market-White-Paper.pdf

擴展閱讀:《 資料庫&存儲:互相最想知道的事

尊重知識,轉載時請保留全文。感謝您的閱讀和支持!

『貳』 Oracle學習筆記的內容介紹

《Oracle學習筆記:日常應用、深入管理、性能優化》內容簡介:
通過閱讀《Oracle學習筆記:日常應用、深入管理、性能優化》,讀者可以了解Oracle 11g的體系結構、資料庫管理和配置、資料庫安全、資料庫日常維護、PL/SQL語言等資料庫管理員的必備常識,還可以掌握Oracle 11g的多種高級應用,包括資料庫網路配置、作業調度、事務管理、內存和進程配置以及對Oracle資料庫進行性能監測、分析和優化等。
《Oracle學習筆記:日常應用、深入管理、性能優化》內容豐富、注重實用,理論講解與大量實驗相結合,特別適用於Oracle資料庫管理員和應用程序開發人員以及對相關技術感興趣的讀者閱讀,也可以作為大中專院校或培訓機構的相關課程教材。

『叄』 如何在MyEclipse中JDBC連接SQL Server 2008

方法如下:

一、修改SQL Server 2008

首先要確保SQL Server資料庫的登錄方式是『混合驗證模式』。如果不是也不要緊,資料庫登錄模式至少是 『Windows身份驗證模式』,所以打開Microsoft SQL Server Management Studio,以Windows身份驗證模式登錄。在對象資源管理器內右鍵單擊你的資料庫,選擇『屬性』。在彈出的窗口左側選擇『安全性』標簽,然後在右側選中『SQL Server 和 Windows 身份驗證模式』,確定即可。

五、從上圖可以看到已經連接成功

『肆』 增刪改查哪個最重要

關於javaWeb增刪改查的簡單總結 原創
2020-04-25 13:14:49

走到天涯海角

碼齡4年

關注
增刪改查中最簡單的功能是刪除,通過Id來刪除單表或者多表都是可以的。

增刪改查中最重要的功能是查詢,因為不僅僅是單表查詢、連表查詢需要用到查詢,新增前和修改前也要使用到查詢。

查詢遇到的業務比如:

1.登錄:通過查詢用戶名和密碼來找出用戶,密碼可以重復,但是用戶名必須唯一,否則沒辦法找出單個用戶。

(重要) 只要查詢的欄位是唯一的,都可以通過這個欄位來查詢出對應的單個對象或者集合。

什麼欄位是唯一的呢?

如:用戶名必須唯一,文件名必須唯一,主鍵ID必須唯一等等,一時半會想不起來。

新增前,通過查詢獲得如:下拉框中的數據等

在新增時,通過獲取下拉框的值或者輸入框的值,就可以保存新增。

新增也會遇到循環插入的情況,如新增角色和修改角色,要循環插入數據到角色菜單關系表中。

循環插入數據的做法,我是用過兩種方法,一種方法是使用c3p0,另一種是使用mybatis的foreach標簽

修改前,通過查詢,獲得如:用戶的信息,然後放到修改輸入框,提高用戶的使用體驗。

修改時,通過隱藏區的Id,和輸入框或者下拉框中的值,來進行保存修改。

文章知識點與官方知識檔案匹配
Java技能樹首頁概覽
92024 人正在系統學習中
打開CSDN APP,看更多技術內容

JavaWeb實現簡單對資料庫的增刪改查_向晚而生的博客_web實現數...
資料庫:MySQL 連接池:Druid連接池 Github倉庫地址:點我 jar包下載:點我!提取碼:y4ef 參考:Javaweb實現增刪改查操作操作 用JavaWeb部分知識實現對資料庫的增刪改查 只展示Student和Teacher的相關代碼 一、效果圖 二、資料庫實現 1. ...
繼續訪問
Web對資料庫的增刪改查(servlet+jsp+javaBean增刪改查)
1.開始之前的准備(servlet+jsp+javaBean增刪改查) jsp:頁面的請求和展示 在前台主要學了jsp進行頁面的請求和展示 java後台 mysql資料庫 學習了java如何進行資料庫增刪改查 JDBC重構Dao Dao進行sql語句 將資料庫的獲取結果響應到頁面上 ...
繼續訪問
最新發布 javaweb極簡登錄注冊增刪改查
javaweb極簡登錄注冊增刪改查
繼續訪問

簡單的JavaWeb項目,基本的增刪改查和分頁查詢等功能。
簡單的JavaWeb項目,劉意老師整理,擁有登錄,添加,刪除,修改,分頁查詢,刪除選中,復雜分頁查詢功能。
JavaWeb階段案例--簡易版管理圖書系統(增刪改查)
超詳細JavaWeb階段項目 --圖書管理系統 -- 連接資料庫在網頁上實現圖書的增刪改查
繼續訪問

筆記--MySQL相關操作
一 登錄資料庫 1 用戶無密碼: mysql -uroot -p mysql-> 2 用戶有密碼: MySQL -root -p[passwd] mysql-> 二 創建資料庫: 查詢: mysql> show databases; +--------------------+ | Database ...
繼續訪問
Javaweb--通過網頁實現對資料庫的增刪查改
文章目錄Javaweb--通過網頁實現對資料庫的增刪查改1、功能需求2、技術選型2、最終效果圖3、資料庫准備4、前端開發5、後端開發 Javaweb–通過網頁實現對資料庫的增刪查改 通常在寫一些後台管理系統的時候,一定會有關於數據表格的增刪查改的功能實現。最近也是閑來無事,做了這個小案例,希望能幫到有寫這方面需求的朋友們。 1、功能需求   這次以單個的員工數據表為例,實現以下功能需求:   1、能夠正常從資料庫中讀取相應數據。   2、設置分頁,能夠通過點擊頁碼,進行數據更新,同時支持輸入頁碼更新數據
繼續訪問

讓我們在網頁中實現資料庫的增刪改查~
目錄主要思路首先讓我們鏈接自己的資料庫 index.js對資料庫設定一些用戶規則 user.js做一個添加數據的靜態網頁 add.html做一個主頁面 list.html最最最主要的js代碼自我激勵 主要思路 搭建網站伺服器,實現客戶端與伺服器端的通信 連接資料庫, 創建用戶集合, 向集合中插入文檔 當用戶訪問 /list時,將所有用戶信息查詢出來 1.實現路由功能 1.呈現用戶列表頁面 1. 再點擊修改按鈕的時 將用戶ID傳遞到當前頁面 2. 從資料庫中查詢當前用戶信息 將用戶信息展示到頁面中 2.從數據
繼續訪問
JavaWeb 增刪改查快速開發總結
JavaWeb增刪改查基本都是那一套,其中最繁瑣 變動的便是圍繞SQL語句、Servlet來展開,下面是我對這些左到一個小總結,希望能對您有所幫助首先項目搭建好之後就是最關鍵的SQL語句 Servlet代碼 Servlet方法 然後是前端methods()方法 刪除和批量刪除(這里用element做了個刪除提示)...
繼續訪問
Java web階段學習總結(華清遠見)
經過web前端的學習之後,我們開啟了Java web後端的學習。學習一樣新的東西首先要了解它的原理,以及所要具備的一些條件。對於Servlet 的開發步驟一般有:新建一個Java web項目工程 --> 創建servlet類繼承Http Servlet,重寫service方法 --> 在web.xml中做地址映射 --> 打包 --> 部署 --> 啟動容器。這樣就可以在瀏覽器中訪問web程序。了解步驟之後就可以動手敲了。
繼續訪問
javaWeb反思與總結
javaWeb的回顧總結
繼續訪問
javaweb mysql增刪改查_超詳細的JavaWeb用戶的增刪改查實現總結
前言本文是基於單體架構實現的角色的增刪改查的功能。前台使用Bootstrap+Ajax+Jsp , 後端使用Spring+SpringMvc+MyBatis進行開發,相信使用過這些技術的小夥伴應該很好的理解以下的內容,也希望看了這篇文章小夥伴們有所收獲。准備工作後端技術技術說明官網SpringSpring是一個輕量級控制反轉(IoC)和面向切面(AOP)的容器框架。SpringMvcMVC框架ht...
繼續訪問
Javaee增刪改查學習心得
這是我學習完Javaee增刪改查後的一些經驗心得,在這里記錄加深一下印象。 1、創建一個web項目,在左側項目區域右鍵創建新的web項目,如果沒找到選擇最下方other,搜索dy,點擊創建web項目。 2、導入相應的jar包,oracle資料庫導入oracle的jdbc連接jar包,mysql資料庫導入mysql的jdbc連接jar包。在lib文件夾下導入。如需j導入s或css的jar包則最好新建...
繼續訪問
MySQL學習筆記(一) 下載安裝+基本增刪改查 + 事務
mysql筆記,內容包含下載安裝,DDL,DML,DQL,DCL語法,約束,多表查詢等
繼續訪問

簡易的JavaWeb實現增刪查改(附資料庫)
一、概述 時隔一年,重回博客,應許多初學的同學要求,實現簡單的增刪查改功能的小程序,具體請詳看下面的截圖~~~ 二、開發環境 語言:JavaWeb、JSP、CSS 資料庫:MySQL 開發工具:Eclipse 三、部分截圖展示 四、代碼片段 @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletExceptio...
繼續訪問

php網頁設計實現增刪改查,包含報告實訓內容
運用PHP技術和MySQL資料庫實現對一個資料庫表格的操作。 實驗環境 1.DreamweaverCS6軟體2.phpStudy2018軟體(包含Web伺服器Apache、資料庫伺服器MySQL、PHP語言引擎) 實驗內容安排 1.選擇學習或生活環境中的一個數據表格並構造符合SQL格式的初始數據2.通過瀏覽器對這個數據表格進行查找、顯示、修改、增添、刪除5項操作...
繼續訪問

增刪查改
增刪查改 增刪查改在所有的語言代碼中都是最基礎和重要的,增刪查改在代碼中擔任著不可缺少的一部分,整個代碼項目都是靠著增刪查改。「增刪查改」就如同字面意思一樣,增:新增(insert),刪:刪除(delete),查:查詢(select),改:修改(update),代碼做出來的東西大部分都是靠著「增刪查改」來運行的! 先說的就是增:新增(insert),最簡單的意思就是用原來的數據來新增一條或多條新的數據,這就是新增。首先要有一個寫一個模態框才能在模...
繼續訪問
JavaWeb實現簡單對資料庫的增刪改查
通過JavaWeb實現簡單的對資料庫的增刪改查
繼續訪問

熱門推薦 java web基本增刪改查操作
這是一個結合mysql資料庫,java後端和jsp頁面的綜合案例: 聲明:學習本文時,需要有一定的基礎,例如jsp,jquery,servlet,Java,jdbc等基礎,如果不懂的希望從基礎學起,加油! 在代碼中有對應的注釋說明,所以我就直接上代碼了 大致流程是: 首先訪問到servlet層,在servlet層里調用StudentRepository的各個方法,然後展示到jsp頁面中。所以瀏覽器訪問路徑是servlet層里StudentServlet中@WebServlet("/student")的路徑(
繼續訪問

關於Javaweb課程設計的心得體會.docx
關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx
記錄一下springboot+mybatis實現增刪改查的基本流程和心得
記錄一下springboot+mybatis實現增刪改查的基本流程和心得 springboot是一個spring家族中舉足輕重的那一個,也是在javaweb實際開發過程經常使用到的一個框架,熟練使用springboot是在實際工作中非常重要的。(在一開始中我認為要先學會如何使用,而不是深究底層原理和代碼,畢竟一般的java開發工作中只會項目經理只會不停給你分配增刪改查的功能任務,當然,隨著開發經驗的不斷提升,只止步於增刪改查會很難得到工作地位提升的機會) 第一步:導入pom.xml依賴 <!--spr
繼續訪問

java的開發環境和運行環境,年薪60W必備
四面阿里 面試崗位是研發工程師,直接找螞蟻金服的大佬進行內推,參與了阿里巴巴中間件部門的提前批面試,一共經歷了四次面試,拿到了口頭offer。 一面: 自我介紹 項目中做了什麼,難點呢。 Java的線程池說一下,各個參數的作用,如何進行的。 Redis講一下 分布式系統的全局id如何實現。用zookeeper如何實現的呢,機器號+時間戳即可。 分布式鎖的方案,redis和zookeeper那個好,如果是集群部署,高並發情況下哪個性能更好。 kafka了解么,了解哪些消息隊列。 想做業務還是研究。 然後出了
繼續訪問

web增刪改查資料庫實驗總結
java
寫評論

『伍』 資料庫索引有什麼作用和好處

資料庫索引是為了增加查詢速度而對表欄位附加的一種標識。見過很多人機械的理解索引的概念,認為增加索引只有好處沒有壞處。這里想把之前的索引學習筆記總結一下:
首先明白為什麼索引會增加速度,DB在執行一條Sql語句的時候,默認的方式是根據搜索條件進行全表掃描,遇到匹配條件的就加入搜索結果集合。如果我們對某一欄位增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。那麼在任何時候都應該加索引么?這里有幾個反例:1、如果每次都需要取到所有表記錄,無論如何都必須進行全表掃描了,那麼是否加索引也沒有意義了。2、對非唯一的欄位,例如「性別」這種大量重復值的欄位,增加索引也沒有什麼意義。3、對於記錄比較少的表,增加索引不會帶來速度的優化反而浪費了存儲空間,因為索引是需要存儲空間的,而且有個致命缺點是對於update/insert/delete的每次執行,欄位的索引都必須重新計算更新。
那麼在什麼時候適合加上索引呢?我們看一個Mysql手冊中舉的例子,這里有一條sql語句:
SELECT
c.companyID,
c.companyName
FROM
Companies
c,
User
u
WHERE
c.companyID
=
u.fk_companyID
AND
c.numEmployees
>=
0
AND
c.companyName
LIKE
'%i%'
AND
u.groupID
IN
(SELECT
g.groupID
FROM
Groups
g
WHERE
g.groupLabel
=
'Executive')
這條語句涉及3個表的聯接,並且包括了許多搜索條件比如大小比較,Like匹配等。在沒有索引的情況下Mysql需要執行的掃描行數是77721876行。而我們通過在companyID和groupLabel兩個欄位上加上索引之後,掃描的行數只需要134行。在Mysql中可以通過Explain
Select來查看掃描次數。可以看出來在這種聯表和復雜搜索條件的情況下,索引帶來的性能提升遠比它所佔據的磁碟空間要重要得多。
那麼索引是如何實現的呢?大多數DB廠商實現索引都是基於一種數據結構——B樹。因為B樹的特點就是適合在磁碟等直接存儲設備上組織動態查找表。B樹的定義是這樣的:一棵m(m>=3)階的B樹是滿足下列條件的m叉樹:
1、每個結點包括如下作用域(j,
p0,
k1,
p1,
k2,
p2,
...
ki,
pi)
其中j是關鍵字個數,p是孩子指針
2、所有葉子結點在同一層上,層數等於樹高h
3、每個非根結點包含的關鍵字個數滿足[m/2-1]<=j<=m-1
4、若樹非空,則根至少有1個關鍵字,若根非葉子,則至少有2棵子樹,至多有m棵子樹
看一個B樹的例子,針對26個英文字母的B樹可以這樣構造:
可以看到在這棵B樹搜索英文字母復雜度只為o(m),在數據量比較大的情況下,這樣的結構可以大大增加查詢速度。然而有另外一種數據結構查詢的虛度比B樹更快——散列表。Hash表的定義是這樣的:設所有可能出現的關鍵字集合為u,實際發生存儲的關鍵字記為k,而|k|比|u|小很多。散列方法是通過散列函數h將u映射到表T[0,m-1]的下標上,這樣u中的關鍵字為變數,以h為函數運算結果即為相應結點的存儲地址。從而達到可以在o(1)的時間內完成查找。
然而散列表有一個缺陷,那就是散列沖突,即兩個關鍵字通過散列函數計算出了相同的結果。設m和n分別表示散列表的長度和填滿的結點數,n/m為散列表的填裝因子,因子越大,表示散列沖突的機會越大。
因為有這樣的缺陷,所以資料庫不會使用散列表來做為索引的默認實現,Mysql宣稱會根據執行查詢格式嘗試將基於磁碟的B樹索引轉變為和合適的散列索引以追求進一步提高搜索速度。我想其它資料庫廠商也會有類似的策略,畢竟在資料庫戰場上,搜索速度和管理安全一樣是非常重要的競爭點。

『陸』 valuelesscolumn的好壞

當咱們設計一個關系型資料庫時,著手點是系統中的對象(Entities),再為對象加上屬性描述,從而轉換為表設計。在關系型資料庫中咱們不會考慮表的行,由於肯定表的欄位名稱以後,數據逐行寫入,資料庫會管理行數據空間。資料庫

寬行仍是窄行(Wild Rows or Skinny Rows)apache

但在Cassandra里,咱們必須在設計時考慮列族的行數,這取決於定義的列的數目。一般會有兩種選擇:數據結構

寬行(Wild Rows):在每行中包含數量巨大(一般會達到百萬 級之多)的列,但只有不多的行數;less

窄行(Skinny Rows):比較像關系型資料庫的使用方法,有少許較為固定的列,使用不一樣、不斷增長的行來存儲。資料庫設計

列排序(Column Sorting)ide

Cassandra不支持查詢語言,也不支持查詢時使用Order By對數據進行排序,排序是須要設計時考慮。在定義列族時,能夠包含一個名為CompareWith的元素,這個元素決定了此列族的排序規則。Cassandra提供的排序支持如下幾種數據類型,包含了字元、位元組、數字和日期時間:AsciiType, BytesType, LexicalUUIDType, Integer Type, LongType, TimeUUIDType, or UTF8Type.ui

設計原則(Design Principles)spa

Cassandra的數據結構設計與關系型資料庫徹底不一樣,核心有三大設計原則:物化視圖、無值列和復合鍵。設計

物化視圖(Materialized View)rest

在關系型資料庫中,咱們一般會使用Where條件查詢表的部分結果集,好比咱們設計了Users表,有一個City欄位,而後使用Where City = 'New York'來進行查詢。

SELECT * FROM USERS WHERE CITY = "New York"
在Cassandra中,咱們會直接建立一個新的列族名為CityUsers,以City為行名稱,列為全部在這個City中的Users.

$ create column family CityUser;
$ set CityUsers["NewYork"]["UserID"] = "1, 2, 3, 4";
這在Cassandra里是一種很是廣泛和常見的設計,物化視圖為查詢而設計一份映射數據,而不是從原始數據中去尋找。

無值列(Valueless Column)

以上面的Users/CityUsers為例,咱們設計了行名為City,列為Users的列族,由於數據是從Users列族中映射過來的,其實咱們並不須要為列指定內容,它能夠直接引用Users表中的數據。

復合鍵(Aggregate Key)在《Cassandra – 理解關鍵概念和數據模型》為你們介紹過復合鍵的用法,在Cassandra中,大量使用復合鍵也是設計原則之一。 在設計Cassandra數據結構時,應當緊緊把握的兩點:

從查詢開始:Cassandra不是為對象而設計,而是為查詢而設計。先看看系統中須要的查詢是什麼樣的,再著手設計;

系統時間:由於Cassandra的列結構包含時間戳,因此你必須考慮從不一樣客戶端過來的時間格式,有必要指定一個統一的標准時間,固然,這將帶來本地時間轉換問題。

數據設計示例(Data Design Sample)

需求

查詢指定地區的酒店

查詢指定酒店的信息,包括名稱和所在地區

查詢酒店附近有趣的地點

查詢指定日期區間可預訂的房間

查詢房間的評分

提交客戶信息預訂房間

關系型資料庫設計

Screen Shot 2013-12-01 at 10.32.08 AM

Cassandra數據結構設計

Screen Shot 2013-12-01 at 10.34.12 AM

設計思路:

建立資料庫結構;

建立酒店和附近場所的數據結構。酒店是普通列族,附近場所是超級列族;

查詢指定地區的酒店,使用第二簇索引完成;

查詢一個酒店,而後查詢附近場所;

預訂酒店時,向Reservation列族寫入行數據。

Cassandra.yaml

keyspaces:
- name: Hotelier
replica_placement_strategy: org.apache.cassandra.locator.RackUnawareStrategy
replication_factor: 1
column_families:
- name: Hotel
compare_with: UTF8Type
- name: HotelByCity
compare_with: UTF8Type
- name: Guest
compare_with: BytesType
- name: Reservation
compare_with: TimeUUIDType
- name: PointOfInterest
column_type: Super
compare_with: UTF8Type
compare_subcolumns_with: UTF8Type
- name: Room
column_type: Super
compare_with: BytesType
compare_subcolumns_with: BytesType
- name: RoomAvailability
column_type: Super
compare_with: BytesType
compare_subcolumns_with: BytesType
本文參考自《Cassandra: The Definitive Guide》

原文連接:Cassandra – 數據結構設計概念和原則

相關文章
1. 資料庫 - 概念結構設計
2. 資料庫設計----概念結構設計(概念模型、E—R模型、概念結構設計)
3. 資料庫原理 概念結構設計的方法
4. 資料庫原理(十 一)- 概念結構設計
5. 資料庫結構設計概念設計
6. 資料庫設計(1)_概念結構設計
7. 【資料庫原理】概念結構、邏輯結構設計案例
8. 資料庫原理 概念結構設計-E-R圖及其設計
9. 設計模式-----原則概念
10. 資料庫學習筆記(四)資料庫設計——概念結構設計
更多相關文章...
• 資料庫是什麼?資料庫的概念 - MySQL教程
• Web 創建設計 - 網站建設指南
• TiDB 在摩拜單車在線數據業務的應用和實踐
• Flink 數據傳輸及反壓詳解

『柒』 Python學習筆記:如何將字典快速插入資料庫

在我們工作中,手頭不一定都有VISIO等資料庫設計軟體,往往是我們直接在SQL企業管理器中直接設計資料庫,再添加資料庫字典,以方便以後的工作及管理。有時我很苦惱,因為我們不得不打兩次相現的數據欄位的說明,麻煩。不過,也不盡然,不久前我發現了一個更好的方法:(以我建一個表為例) 1、打開企業管理器。 2、在關系中「右擊」,「新建關系」,在讓你選擇表時選擇取消。 3、在關系在,「右鍵」,選「新建表」,輸入我們想要的名字。(方法是不是和傳統不一樣了) 4、在我們剛新建的表上「右擊」,然後「表視圖」,「修改自定義」。 5、在彈出的對話框中選擇我們想要的列。 6、確定就OK了。 7、當然是輸入我們腦子里的數據表結構及說明,當我們要生成這個數據表的字典的時候,就選中這些列,CTRL+C,然後到Excel在CTRL+V,如果想到導出WORD中,再在Excel中選中想要的單元格,CTRL+C到WORD中CTRL+V 8、當然是OK了!看一下我們的成果吧!

熱點內容
怎麼改服務密碼 發布:2025-07-27 19:17:16 瀏覽:634
python小項目源碼 發布:2025-07-27 19:12:19 瀏覽:366
python畫矩形 發布:2025-07-27 19:07:31 瀏覽:993
小米盒子怎麼看配置 發布:2025-07-27 19:00:34 瀏覽:835
百度打開密碼是多少 發布:2025-07-27 18:53:11 瀏覽:21
華為方舟編譯器免費使用 發布:2025-07-27 18:53:08 瀏覽:191
組態王與資料庫連接 發布:2025-07-27 18:52:29 瀏覽:306
dhcp配置錯誤怎麼修復 發布:2025-07-27 18:41:09 瀏覽:817
我的世界tis伺服器的版本 發布:2025-07-27 18:35:50 瀏覽:552
達內軟體編程 發布:2025-07-27 18:33:09 瀏覽:912