2019年天貓雙十一總成交額在11日24時最終定格在2684億,再次刷新雙十一交易額記錄,交易峰值54.4萬筆/秒,交易總額相比去年增加549億元,同比2018年的2135億增長25.71%。
2019天貓雙11交易額統計數據:
- 00:01:36,2019天貓雙十一交易額破100億,用時96秒,2018年破百億用時2分05秒;
- 00:12:49,2019天貓雙十一交易額破500億,用時12分49秒;
- 01:03:59,2019天貓雙十一交易額超過1000億
- 01:26:07,2019天貓雙十一交易額超過1207億!打破2016年天貓雙11全天交易額紀錄;
- 10:04:49:,2019天貓雙十一交易額超過1682億!打破2017年天貓雙11全天交易額紀錄!!
- 12:00:00,2019天貓雙11全球半天成交額已超1845億!
- 14:21:27,2019天貓雙十一交易額超過2000億元!
- 16:31:21,天貓雙十一交易額2135億,打破2018年天貓雙11全天交易額紀錄!
- 24:00:00,2019天貓雙11交易額為2684億元,超出2018年全天交易額549億。
交易峰值54.4萬筆/秒,阿里巴巴是如何做到能在這麼高的併發量的情況下保證數據庫的穩定的呢?那就要歸功於阿里巴巴OceanBase數據庫,它擁有卓越的性能,該數據庫憑藉強勁的性能保證“雙11”淘寶、支付寶、天貓等等穩定運行,已在螞蟻金服和阿里巴巴業務系統中得到了廣泛應用。
俗話說,外行看熱鬧,內行看門道。當你為天貓“雙11”總成交額又創世界紀錄瘋狂打Call之時,可否注意到這背後,除了阿里雲平臺穩定、線性的輸出以外,還有OceanBase的優異表現?OceanBase是典型的“用出來”的數據庫,它經歷過最為嚴苛的極限場景的考驗,比如雙11、新春紅包等。除了服務阿里巴巴 / 螞蟻金服,自2017年開始,OceanBase已經對外商用,服務給了更多的外部客戶,包括建設銀行、南京銀行、中國人保健康、西安銀行等。
我們來看看OceanBase的簡介:
要看懂上圖就要了解什麼是數據庫,什麼是關係型數據庫。
數據庫簡介
數據庫是“按照數據結構來組織、存儲和管理數據的倉庫”。是一個長期存儲在計算機內的、有組織的、有共享的、統一管理的數據集合。數據庫是以一定方式儲存在一起、能與多個用戶共享、具有儘可能小的冗餘度、與應用程序彼此獨立的數據集合,可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的數據進行新增、查詢、更新、刪除等操作。
數據庫就是一種特殊的文件,其中存儲著需要的數據
當前主要使用兩種類型的數據庫:關係型數據庫RDBMS(Relational Database Management System)、非關係型數據庫。
數據庫的特點:
- 持久化存儲
- 讀寫速度極高
- 保證數據的有效性
- 對程序支持性非常好,容易擴展
所謂的關係型數據庫RDBMS,是建立在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。關係型數據庫模型是把複雜的數據結構歸結為簡單的二元關係(即二維表格形式)。在關係型數據庫中,對數據的操作幾乎全部建立在一個或多個關係表格上,通過這些關聯的表格分類、合併、連接或選取等運算來實現數據的管理。就像Excel中的:
關係型數據庫的主要產品:
- oracle:在以前的大型項目中使用,銀行,電信等項目
- mysql:web時代使用最廣泛的關係型數據庫
- ms sql server:在微軟的項目中使用
- sqlite:輕量級數據庫,主要應用在移動平臺
非關係型數據庫也被稱為NoSQL數據庫,NoSQL的本意是“Not Only SQL”,指的是非關係型數據庫,而不是“NO SQL”的意思,因此,NoSQL的產生並不是要徹底否定關係型數據庫,而是作為傳統數據庫的一個有效補充。NoSQL數據庫在特定的場景下可以發揮難以想象的高效率和高性能。
非關係型數據庫的主要產品:
- Memcached(key-value):開源的、高性能的、具有分佈式內存對象的緩存系統
- redis(key-value):支持內存緩存、持久化儲存、主從集群、分佈式等功能
- Cassandra(Column-oriented):最初由Facebook開發,用於儲存特別大的數據
- MongoDB (Document-oriented):一個介於關係數據庫和非關係數據庫之間的產品
OceanBase是關係型數據庫,全兼容MySQL,也就是說學好MySQL就是學好它。看看OceanBase如今在世界上的地位:
接下來我們來看看MySQL數據庫:
MySQL數據庫入門
MySQL 簡介
MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB公司開發,後來被Sun公司收購,Sun公司後來又被Oracle公司收購,目前屬於Oracle旗下產品。
特點
開源 免費 不要錢 使用範圍廣,跨平臺支持性好,提供了多種語言調用的 API,是學習數據庫開發的首選
安裝
系統以Ubuntu為例,其他系統百度有很多教程,在終端中輸入如下命令,回車後,然後按照提示輸入:
sudo apt-get install mysql-serversudo apt-get install mysql-client
服務器用於接收客戶端的請求、執行sql語句、管理數據庫,服務器端一般以服務方式管理,名稱為mysql。
sudo service mysql start
配置
配置文件目錄為/etc/mysql/mysql.cnf
- 主要配置項如下
bind-address表示服務器綁定的ip,默認為127.0.0.1port表示端口,默認為3306datadir表示數據庫目錄,默認為/var/lib/mysqlgeneral_log_file表示普通日誌,默認為/var/log/mysql/mysql.loglog_error表示錯誤日誌,默認為/var/log/mysql/error.log
登錄
輸入mysql -u root -p
提示輸入之前第一條命令設置的密碼,出現如下界面則安裝成功
常見定義
- 主鍵 :唯一標識一行記錄的字段
- 數據行(記錄) : 一行記錄某個事物的完整信息的數據
- 數據列(字段) : 一列數據類型相同的數據
- 數據表 : 有若干字段和記錄組成
- 數據庫 : 由若干數據表組成
常見數據類型:
約束
- 主鍵primary key:物理上存儲的順序
- 非空not null:此字段不允許填寫空值
- 惟一unique:此字段的值不允許重複
- 默認default:當不填寫此值時會使用默認值,如果填寫時以填寫為準
- 外鍵foreign key:對關係字段進行約束,當為關係字段填寫值時,會到關聯的表中查詢此值是否存在,如果存在則填寫成功,如果不存在則填寫失敗並拋出異常
數據庫操作
數據庫登錄和退出:
數據庫的基本操作:
數據表的基本操作:
數據表數據的基本操作:
- 增 insert into table_name values(),(),();
- 刪 delete from table_name where 條件;
- 改 update table_name set key=value where 條件;
- 查 select */查詢的字段 from table_name where 條件;
當然,MySQL查詢是個大內容,有條件查詢、排序、聚合函數、分組、分頁、連接查詢、自關聯查詢、子查詢等等,如何寫好SQL語句又是一門大學問,後面將會降到。查詢的完整格式:
SELECT select_expr [,select_expr,...] [ FROM tb_name [WHERE 條件判斷] [GROUP BY {col_name | postion} [ASC | DESC], ...] [HAVING WHERE 條件判斷] [ORDER BY {col_name|expr|postion} [ASC | DESC], ...] [ LIMIT {[offset,]rowcount | row_count OFFSET offset}]]
MySQL高級進階
視圖
# 視圖的定義方式:create view 視圖名稱(一般使用v開頭) as select語句;# 查看視圖show tables; # 使用視圖select * from v_goods_info; # 刪除視圖drop view 視圖名字;
事務
1.事務四大特性ACID
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔離性(Isolation)
- 持久性(Durability)
2.開啟事務
開啟事務後執行修改命令,變更會維護到本地緩存中,而不維護到物理表中
begin; 或者 start transaction;
執行SQL語句
3.提交事務
將緩存中的數據變更維護到物理表中
commit;
4.回滾事務
放棄緩存中變更的數據 表示事務執行失敗 應該回到開始事務前的狀態
rollback;
索引
# 查看錶中已有索引show index from 表名;# 創建索引alter table 表名 add index 索引名【可選】(字段名,…);create index 索引名稱 on 表名(字段名稱(長度))# 刪除索引drop index 索引名稱 on 表名;
優點:
加快數據的查詢速度
缺點:
創建索引會浪費時間和佔用磁盤空間,並且隨著數據量的增加所耗費的時間會越來越多
使用原則:
- 經常發生數據更新的表避免使用過多的索引
- 數據量小的表沒有必要使用索引
- 數據量較大同時不會頻發發生數據更改的表可以使用索引
三範式
設計關係數據庫時,遵從不同的規範要求,設計出合理的關係型數據庫,這些不同的規範要求被稱為不同的範式,
各種範式呈遞次規範,越高的範式數據庫冗餘越小。
數據冗餘是指數據之間的重複,也可以說是同一數據存儲在不同數據文件中的現象
六種範式:
- 第一範式(1NF):強調的是字段的原子性,即一個字段不能夠再分成其他幾個字段。
- 第二範式(2NF):一是表必須有一個主鍵,二是非主鍵字段必須完全依賴於主鍵,而不能只依賴於主鍵的一部分
- 第三範式(3NF):不能存在:非主鍵列 A 依賴於非主鍵列 B,非主鍵列 B 依賴於主鍵的情況。
- 巴斯-科德範式(BCNF):第三範式的基礎上進一步消除主屬性對於碼的部分函數依賴和傳遞依賴
- 第四範式 ( 4NF)限制關係模式的屬性之間不允許有非平凡且非函數依賴的多值依賴
- 第五範式(5NF,又稱完美範式):消除了4NF中的連接依賴
E-R模型
- E-R模型由 實體、屬性、實體之間的關係構成,主要用來描述數據庫中表之間的關係和表結構。
- 開發流程是先畫出E-R模型,然後根據三範式設計數據庫中的表結構
數據庫是門很大很廣的學問,想一下子學完是不可能的,本篇先就講講這些基礎的概念,還有相關的數據庫設計和數據庫架構及數據庫優化將在後面講,也將講到OceanBase中提到的分佈式的概念,敬請關注。
作者簡介:Python菜鳥工程師,將在接下來的一段時間內與大家分享一些與Python相關的知識點。如若文中出現問題,各位大佬多多指點,互相學習。喜歡的關注一個吧!謝謝!
閱讀更多 大鬍子網絡 的文章