Docker數據庫緩存鏡像容器相關地址及知識彙總

1. Docker MongoDB

  • MongoDB 是一個免費的開源跨平臺面向文檔的 NoSQL 數據庫程序。NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"。NoSQL 是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一概念無疑是一種全新的思維的注入。
  • MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。
  • MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。它支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是它支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
  • MongoDB存儲的數據格式類似於JSON的格式bson。
  • 不適用的場景如下:
1)要求高度事務性的系統。
2)傳統的商業智能應用。
3)複雜的跨文檔(表)級聯查詢。
  • 數據模型:
1)一個MongoDB 實例可以包含一組數據庫,一個DataBase 可以包含一組Collection(集合),一個集合可以包含一組Document(文檔)。一個Document包含一組field(字段),每一個字段都是一個key/value pair。
2)key: 必須爲字符串類型。
3)value:可以包含如下類型。
● 基本類型,例如,string,int,float,timestamp,binary 等類型。
● 一個document。
● 數組類型。
  • 相關鏈接:
1)鏡像庫地址:https://hub.docker.com/_/mongo?tab=tags&page=1
2)取最新版的 MongoDB 鏡像: docker pull mongo:latest
3)MongoDB 官網地址:https://www.mongodb.com/
4)MongoDB 官方英文文檔:https://docs.mongodb.com/manual/
5)MongoDB 各平臺下載地址:https://www.mongodb.com/download-center#community
6)mongoDB runoob 教程地址:https://www.runoob.com/mongodb/mongodb-tutorial.html
7)PHP 安裝 mongoDB 擴展教程地址:https://www.runoob.com/mongodb/mongodb-install-php-driver.html
8)php mongoDB 擴展文件地址:http://pecl.php.net/package/mongodb

2. Docker Redis

  • REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統。
  • Redis 是一個完全開源免費的使用 ANSI C 語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value 的 NoSQL 數據庫,並提供多種語言的 API。
  • 它通常被稱爲數據結構服務器,因爲值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
  • Redis 與其他 key - value 緩存產品有以下三個特點:
1)Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啓的時候可以再次加載進行使用。
2)Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
3)Redis支持數據的備份,即master-slave模式的數據備份。
  • Reids 的優勢:
1)性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
2)豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類操作。
3)原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
4)豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
  • Redis與其他key-value存儲有什麼不同?
1)Redis有着更爲複雜的數據結構並且提供對他們的原子性操作,這是一個不同於其他數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。
2)Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,因爲數據量不能大於硬件內存。在內存數據庫方面的另一個優點是,相比在磁盤上相同的複雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因爲他們並不需要進行隨機訪問。
  • 需要了解:
    1)這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
    2)Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用。
    3)Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹複製。存盤可以有意無意的對數據進行寫操作。由於完全實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。
  • 數據模型:
1)String: 字符串,string是最簡單的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value,其上支持的操作與Memcached的操作類似。但它的功能更豐富。
2)Hash: 散列(哈希),鍵、值都爲字符串的哈希表
3)List: 列表((雙向鏈表),list是一個鏈表結構,主要功能是push、pop、獲取一個範圍的所有值等等。操作中key理解爲鏈表的名字。
4)Set: 集合,set和我們數學中的集合概念相似,對集合的操作有添加刪除元素,有對多個集合求交併差等操作。操作中key理解爲集合的名字。
5)Sorted Set: 有序集合,zset是set的一個升級版本,他在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定後,zset會自動重新按新的值調整順序。可以理解了有兩列的mysql表,一列存value,一列存順序。操作中key理解爲zset的名字。
  • 相關地址:
1)鏡像庫地址: https://hub.docker.com/_/redis?tab=tags
2)取最新版的 Redis 鏡像:docker pull redis:latest
3)官網地址:https://redis.io
4)Redis runoob 教程:https://www.runoob.com/redis/redis-tutorial.html
5)PHP 安裝 redis 擴展教程:https://www.runoob.com/redis/redis-php.html
6)php Redis擴展文件 地址:https://github.com/phpredis/phpredis/releases

其他相關:

  • NoSQL介紹: https://www.runoob.com/mongodb/nosql.html
  • Redis–Memched–Cache緩存介紹使用:https://www.cnblogs.com/hulizhong/p/10776203.html
  • 關係型數據庫遵循ACID規則
1、A (Atomicity) 原子性
原子性很容易理解,也就是說事務裏的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裏的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。
比如銀行轉賬,從A賬戶轉100元至B賬戶,分爲兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要麼一起完成,要麼一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
2、C (Consistency) 一致性
一致性也比較容易理解,也就是說數據庫要一直處於一致的狀態,事務的運行不會改變數據庫原本的一致性約束。
例如現有完整性約束a+b=10,如果一個事務改變了a,那麼必須得改變b,使得事務結束後依然滿足a+b=10,否則事務失敗。
3、I (Isolation) 獨立性
所謂的獨立性是指併發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。
比如現在有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
4、D (Durability) 持久性
持久性是指一旦事務提交後,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。
  • 分佈式系統
1)分佈式系統(distributed system)由多臺計算機和通信的軟件組件通過計算機網絡連接(本地網絡或廣域網)組成。2)分佈式系統是建立在網絡之上的軟件系統。正是因爲軟件的特性,所以分佈式系統具有高度的內聚性和透明性。
因此,網絡和分佈式系統之間的區別更多的在於高層軟件(特別是操作系統),而不是硬件。
3)分佈式系統可以應用在不同的平臺上如:Pc、工作站、局域網和廣域網上等。
  • 分佈式計算的優點
1)可靠性(容錯) :分佈式計算系統中的一個重要的優點是可靠性。一臺服務器的系統崩潰並不影響到其餘的服務器。  
2)可擴展性:在分佈式計算系統可以根據需要增加更多的機器。
3)資源共享:共享數據是必不可少的應用,如銀行,預訂系統。
4)靈活性:由於該系統是非常靈活的,它很容易安裝,實施和調試新的服務。
5)更快的速度:分佈式計算系統可以有多臺計算機的計算能力,使得它比其他系統有更快的處理速度。
6)開放系統:由於它是開放的系統,本地或者遠程都可以訪問到該服務。
7)更高的性能:相較於集中式計算機網絡集羣可以提供更高的性能(及更好的性價比)。
  • 分佈式計算的缺點
1)故障排除:故障排除和診斷問題。
2)軟件:更少的軟件支持是分佈式計算系統的主要缺點。
3)網絡:網絡基礎設施的問題,包括:傳輸問題,高負載,信息丟失等。
4)安全性:開放系統的特性讓分佈式計算系統存在着數據的安全性和共享的風險等問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章