顯示具有 mongoDB 標籤的文章。 顯示所有文章
顯示具有 mongoDB 標籤的文章。 顯示所有文章

2017年8月7日 星期一

Redis資料結構簡介 :TRING(字串)、LIST(清單)、SET(集合)、HASH(散列)和ZSET(有序集合)

Redis資料結構簡介
Redis可以存儲鍵與5種不同資料結構類型之間的映射,這5種資料結構類型分別為
STRING(字串)、LIST(清單)、SET(集合)、HASH(散列)和ZSET(有序集合)


1. STRING(字串):
字串命令: 
命令        行為
GET  獲取存儲在給定鍵中的值
SET  設置存儲在給定鍵中的值
DEL  刪除存儲在給定鍵中的值(這個命令可以用於所有類型)
代碼清單1-1 SETGETDEL的使用示例

$ redis-cli                                 # 啟動redis-cli 用戶端
redis 127.0.0.1:6379> set hello world       # 將鍵 hello 的值設置為 world
OK                                          # SET 命令在執行成功時返回 OK Python 用戶端會將這個 OK 轉換成 True
redis 127.0.0.1:6379> get hello             # 獲取儲存在鍵 hello 中的值。
"world"                                     # 鍵的值仍然是 world ,跟我們剛才設置的一樣。
redis 127.0.0.1:6379> del hello             # 刪除這個鍵值對。
(integer) 1                                 # 在對值進行刪除的時候,DEL 命令將返回被成功刪除的值的數量。
redis 127.0.0.1:6379> get hello             # 因為鍵的值已經不存在,所以嘗試獲取鍵的值將得到一個 nil
(nil)                                       # Python 用戶端會將這個 nil 轉換成 None
redis 127.0.0.1:6379>

2. LIST(列表):
列表命令 
命令        行為
RPUSH     將給定值推入到列表的右端
LRANGE   獲取列表在給定範圍上的所有值
LINDEX    獲取清單在給定位置上的單個元素
LPOP        從列表的左端彈出一個值,並返回被彈出的值
代碼清單1-2 RPUSHLRANGELINDEXLPOP的使用示例

redis 127.0.0.1:6379> rpush list-key item   # 在向清單推入新元素之後,該命令會返回列表的當前長度。
(integer) 1                                 #
redis 127.0.0.1:6379> rpush list-key item2  #
(integer) 2                                 #
redis 127.0.0.1:6379> rpush list-key item   #
(integer) 3                                 #
redis 127.0.0.1:6379> lrange list-key 0 -1  # 使用0為範圍的起始索引,-1為範圍的結束索引,
1) "item"                                   # 可以取出清單包含的所有元素。
2) "item2"                                  #
3) "item"                                   #
redis 127.0.0.1:6379> lindex list-key 1     # 使用LINDEX可以從清單裡面取出單個元素。
"item2"                                     #
redis 127.0.0.1:6379> lpop list-key         # 從清單裡面彈出一個元素,被彈出的元素不再存在於清單。
"item"                                      #
redis 127.0.0.1:6379> lrange list-key 0 -1  #
1) "item2"                                  #
2) "item"                                   #
redis 127.0.0.1:6379>

3. SET(集合):
集合命令 
命令        行為
SADD       將給定元素添加到集合
SMEMBERS     返回集合包含的所有元素
SISMEMBER    檢查給定元素是否存在于集合中
SREM       如果給定的元素存在于集合中,那麼移除這個元素
代碼清單1-3 SADDSMEMBERSSISMEMBERSREM的使用示例

redis 127.0.0.1:6379> sadd set-key item     # 在嘗試將一個元素添加到集合的時候,
(integer) 1                                 # 命令返回1表示這個元素被成功地添加到了集合裡面,
redis 127.0.0.1:6379> sadd set-key item2    # 而返回0則表示這個元素已經存在于集合中。
(integer) 1                                 #
redis 127.0.0.1:6379> sadd set-key item3    #
(integer) 1                                 #
redis 127.0.0.1:6379> sadd set-key item     #
(integer) 0                                 #
redis 127.0.0.1:6379> smembers set-key      # 獲取集合包含的所有元素將得到一個由元素組成的序列,
1) "item"                                   # Python用戶端會將這個序列轉換成Python集合。
2) "item2"                                  #
3) "item3"                                  #
redis 127.0.0.1:6379> sismember set-key item4   # 檢查一個元素是否存在于集合中,
(integer) 0                                     # Python用戶端會返回一個布林值來表示檢查結果。
redis 127.0.0.1:6379> sismember set-key item    #
(integer) 1                                     #
redis 127.0.0.1:6379> srem set-key item2    # 在使用命令移除集合中的元素時,命令會返回被移除的元素數量。
(integer) 1                                 #
redis 127.0.0.1:6379> srem set-key item2    #
(integer) 0                                 #
redis 127.0.0.1:6379>  smembers set-key
1) "item"
2) "item3"
redis 127.0.0.1:6379>

4. HASH(散列):
散列命令 
命令        行為
HSET        在散列裡面關聯起給定的鍵值對
HGET       獲取指定散列鍵的值
HGETALL  獲取散列包含的所有鍵值對
HDEL       如果給定鍵存在於散列裡面,那麼移除這個鍵
代碼清單1-4 HSETHGETHGETALLHDEL的使用示例

redis 127.0.0.1:6379> hset hash-key sub-key1 value1 # 在嘗試添加鍵值對到散列的時候,
(integer) 1                                         # 命令會返回一個值來表示給定的鍵是否已經存在於散列裡面。
redis 127.0.0.1:6379> hset hash-key sub-key2 value2 #
(integer) 1                                         #
redis 127.0.0.1:6379> hset hash-key sub-key1 value1 #
(integer) 0                                         #
redis 127.0.0.1:6379> hgetall hash-key              # 獲取散列包含的所有鍵值對,
1) "sub-key1"                                       # Python用戶端會將這些鍵值對轉換為Python字典。
2) "value1"                                         #
3) "sub-key2"                                       #
4) "value2"                                         #
redis 127.0.0.1:6379> hdel hash-key sub-key2        # 在刪除鍵值對的時候,
(integer) 1                                         # 命令會返回一個值來表示給定的鍵在移除之前是否存在於散列裡面。
redis 127.0.0.1:6379> hdel hash-key sub-key2        #
(integer) 0                                         #
redis 127.0.0.1:6379> hget hash-key sub-key1        # 從散列裡面單獨取出一個域。
"value1"                                            #
redis 127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"

5. ZSET(有序集合):
有序集合命令 
命令        行為
ZADD       將一個帶有給定分值的成員添加到有序集合裡面
ZRANGE   根據分值的排序順序,獲取有序集合在給定位置範圍內的所有元素
ZRANGEBYSCORE   獲取有序集合在給定分值範圍內的所有元素
ZREM      如果給定成員存在于有序集合,那麼移除這個成員
代碼清單1-5 ZADDZRANGEZRANGEBYSCOREZREM的使用示例

redis 127.0.0.1:6379> zadd zset-key 728 member1     # 在嘗試向有序集合添加元素的時候,
(integer) 1                                         # 命令會返回新添加元素的數量。
redis 127.0.0.1:6379> zadd zset-key 982 member0     #
(integer) 1                                         #
redis 127.0.0.1:6379> zadd zset-key 982 member0     #
(integer) 0                                         #
redis 127.0.0.1:6379> zrange zset-key 0 -1 withscores   # 獲取有序集合包含的所有元素,
1) "member1"                                            # 這些元素會按照分值進行排序,
2) "728"                                                # Python用戶端會將這些分值轉換成浮點數。
3) "member0"                                            #
4) "982"                                                #
redis 127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores   # 也可以根據分值來獲取有序集合的其中一部分元素。
1) "member1"                                                    #
2) "728"                                                        #
redis 127.0.0.1:6379> zrem zset-key member1     # 在移除有序集合元素的時候,
(integer) 1                                     # 命令會返回被移除元素的數量。
redis 127.0.0.1:6379> zrem zset-key member1     #
(integer) 0                                     #
redis 127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"



link from => http://redisinaction.com/preview/chapter1.html

Linux 常用資料庫介紹

    1-1 一些資料庫和緩存伺服器的特性與功能
    名稱
    類型
    資料存儲選項
    查詢類型
    附加功能
    Redis
    使用記憶體存儲(in-memory 的非關聯式資料庫
    字串、清單、集合、散清單、有序集合
    每種資料類型都有自己的專屬命令, 另外還有批量操作(bulk operation)和不完全(partial)的事務支援
    發佈與訂閱, 主從複製(master/slave replication), 持久化, 腳本(存儲過程,stored procedure
    memcached
    使用記憶體存儲的鍵值緩存
    鍵值之間的映射
    創建命令、讀取命令、更新命令、刪除命令以及其他幾個命令
    為提升性能而設的多執行緒伺服器
    MySQL
    關聯式資料庫
    每個資料庫可以包含多個表, 每個表可以包含多個行; 可以處理多個表的視圖(view); 支援空間(spatial)和協力廠商擴展
    SELECT  INSERT  UPDATE  DELETE 、函數、存儲過程
    支援ACID性質(需要使用InnoDB), 主從複製和主主複製 master/master replication
    PostgreSQL
    關聯式資料庫
    每個資料庫可以包含多個表, 每個表可以包含多個行; 可以處理多個表的視圖; 支援空間和協力廠商擴展;支援可定制類型
    SELECT  INSERT  UPDATE  DELETE 、內置函數、自訂的存儲過程
    支援ACID性質,主從複製, 由協力廠商支援的多主複製 multi-master replication
    MongoDB
    使用硬碟存儲(on-disk)的非關係文檔存儲
    每個資料庫可以包含多個表, 每個表可以包含多個無schema schema-less)的BSON文檔
    創建命令、讀取命令、更新命令、刪除命令、條件查詢命令,等等
    支援map-reduce操作,主從複製,分片, 空間索引(spatial inde

2017年6月27日 星期二

JavaScript即未來:14個JavaScript框架

link form => https://kknews.cc/tech/mmllm2g.html
JavaScript即未來:14個JavaScript框架
當今的市場需要快速開發,但是,重複造輪子是沒有必要的。不論你是一個 JavaScript 新手還是一個資深的 JavaScript 開發者,使用框架和庫都能極大提高你的工作效率。 -- Dr. Michael J. Garbade

本文導航
-熱門的開源 JavaScript 框架和庫 …… 12%
-1. Angular.js …… 18%
-2. Backbone.js …… 25%
-3. D3.js …… 30%
-4. React.js …… 35%
-5. jQuery …… 42%
-6. Ember.js …… 48%
-7. Polymer.js …… 53%
-8. Three.js …… 58%
-9. PhantomJS …… 61%
-10. BabylonJS …… 65%
-11. Boba.js …… 69%
-12. Underscore.js …… 73%
-13. Meteor.js …… 79%
-14. Knockout.js …… 84%
-值得注意的是: Node.js …… 86%



原文網址:https://kknews.cc/tech/mmllm2g.html

Javascript 得到了眾多的技術領導者的擁護和支持,其中一位就是 WordPress 的作者 Matt Mullenweg , 他表示 WordPress 開發者[1] 應該學習 JavaScript , 這也清晰地向 WordPress 社區傳達了 JavaScript 在未來的重要性。 同時,這一觀點也被普遍接受。向著更先進的技術靠攏與過渡也同時保證了 WordPress 在未來的挑戰中不會落於人後。

JavaScript 同時也是眾多站在開源立場的技術中的佼佼者。與現在所流行的觀點相反,JavaScript 不是一個工程,而是一個由其核心團隊共同制定和維護的開放標準。ECMAScript[2] , 這是另一個和 JavaScript 相關的名字, 它雖然不是開源的,但它也有一個開放的標準。
ADVERTISEMENT
當你在瀏覽 GitHub 的時候你就可以發現 JavaScript 在當今有多麼流行了。而且就倉庫的數量[3] 而言,JavaScript 絕對位於所有的程式語言當中最頂尖的那一層次。 同時,在 Livecoding.tv 上你也能看出 JavaScript 有多麼突出,這裡的用戶發布的關於 JavaScript 的視頻的數量比其他的話題多得多。在寫這篇文章的時候(2016 年底),Livecoding.tv 上已經有 45,919 個 用戶原創的 JavaScript 視頻教程[4] 。
熱門的開源 JavaScript 框架和庫
回歸到主題, 龐大的社區是 JavaScript 的一個得天獨厚的優勢,同時這也推動了 JavaScript 的蓬勃發展。這裡有數以百千計的成熟的 JavaScript 框架和庫供開發者使用,同時這些最優秀的框架和庫都是開源的。對當前的 JavaScript 開發者來說,能夠使用這些優秀的框架和庫來進行快速開發已經是必須技能了。當今的市場需要快速開發,但是,重複造輪子是沒有必要的。不論你是一個 JavaScript 新手還是一個資深的 JavaScript 開發者,使用框架和庫都能極大提高你的工作效率。
ADVERTISEMENT
好了,讓我們開始吧!
1. Angular.js
Angular.js[5] 是目前最熱門的 JavaScript 框架之一。它用於開發者構建複雜的 web 應用。Angular.js 背後的思想是它的單頁應用 model。同時它 也支持 MVC 架構。在 Angular.js 中 ,開發者可以在前端中使用 JavaScript 代碼,並從字面上擴展 HTML 詞彙。
Angular.js 自 2009 年出現以來已經有了很大的改進。Angular 1 當前的穩定版本是 1.5.8/1.2.30 。你也可以試一試 Angular 2 ,相對於 Angular 1 來說它有了重大的改進,但這個新版本仍未在全球範圍內被普遍使用。
在 Angular.js 中,數據綁定是完成工作的一個重要概念。在用戶與接口的交互中,當交互完成,view 就會自動更新,隨即新值與 model 交互以確保一切都是同步的。底層的邏輯在 model 中執行完成後,DOM 也會隨即更新。
ADVERTISEMENT
2. Backbone.js
複雜 web 應用並不適用於所有場景。一些較簡單的 web 應用框架例如 Backbone.js[6] 就非常適合學習 web app 開發。Backbone.js 是一個簡單的框架,可以快速方便地構建簡單的 web 應用。和 Angular.js 一樣,Backbone.js 也支持 MVC 。Backbone.js 還有一些其它關鍵特性如路由,RESTful API 支持,適當的狀態管理等等。你甚至還可以用 Backbone.js 來構建單頁應用。
當前的穩定版本是 1.3.3,可以在 GitHub[7] 中找到。
3. D3.js
D3.js[8] 是一個優秀的 JavaScript 庫,它允許開發者創建具有數據處理功能的富 web 頁面。D3.js 使用 SVG、HTML 和 CSS 來實現這一切功能。使用 D3.js ,你可以更輕鬆地將數據綁定到 DOM 及啟用數據驅動事件。使用 D3.js ,你還可以創建高質量的數據驅動的 web 頁面來提供一個更易於理解的視覺效果來呈現數據。查看示例 : LCF 符號哈密頓圖[9] ,由 D3.js 強力驅動。
4. React.js
React.js[10] 是一個使用起來很有趣的 JavaScript 框架。和其它的 JavaScript 框架不同,React.js 志在構建一個高可擴展的前端用戶介面。React.js 出現於 2013 年,它採用了 BSD 開源協議。它因其能夠開發複雜且漂亮的用戶介面所帶來的優勢而迅速發展壯大。
React.js 背後的核心思想是虛擬 DOM 。虛擬 DOM 在客戶端和服務端之間扮演著一個中間人的角色並帶來了顯著的性能提升。虛擬 DOM 的改變和伺服器端 DOM 一樣,只需要更新所需的元素,相對於傳統的 UI 渲染來說極大提升了渲染速度。
你還可以使用 Recat 來實現 meterial 風格的設計,使你能夠開發具有無與倫比的性能的 web 應用。
5. jQuery
jQuery[11] 是一個非常流行的 JavaScript 庫,它擁有眾多特性例如事件處理、動畫等。當你在做一個 web 項目的時候,你不會想要把時間浪費在為一些簡單的功能寫代碼上。jQuery 為減少你的工作量提供了一些易於使用的 API 。這些 API 在所有的常見的瀏覽器中都能夠使用。使用 jQuery, 你可以無縫地控制 DOM 以及 Ajax 這樣在近幾年來擁有大量需求的任務。使用 jQuery,開發者不必擔心一些低級的交互,同時可以使他們的 web 應用的開發更加容易與迅速。
jQuery 同時便於分離 HTML 和 JavaScript 代碼,使開發者能夠編寫簡潔而跨瀏覽器兼容的代碼。並且使用 jQuery 創建的 web 應用在將來也易於改善和擴展。
6. Ember.js
Ember.js[12] 是一個 Angular.js 和 React.js 的功能混合體。當你在瀏覽社區的時候你能明顯地感受到 Ember.js 的熱門程度。Ember.js 的新特性也不斷地在添加。它在數據同步方面與 Angular.js 很像。 雙向的數據交換可以確保應用的快速性和可擴展性。同時,它還能夠幫助開發者創建一些前端元素。
和 React.js 的相似之處在於,Ember.js 提供了同樣的伺服器端虛擬 DOM 以確保高性能和高可擴展。同時, Ember.js 提倡簡化代碼,提供了豐富的 API。Ember.js 還有非常優秀的社區。
7. Polymer.js
如果你曾想過創建你自己的 HTML5 元素,那麼你可以使用 Polymer.js[13] 來做這些事。 Polymer 主要集中於通過給 web 開發者提供創建自己的標籤的功能來提供擴展功能。例如,你可以創建一個和 HTML5 中的 <video> 類似的具有自己的功能的 <my_video> 元素。
Polymer 在 2013 年被 Google 引入並以 三句版 BSD[14] 協議發布。
8. Three.js
Three.js[15] 又是另一個 JavaScript 庫,主要用於 3D 效果開發。如果你在做遊戲開發的動畫效果,那麼你可以利用 Three.js 的優勢。Three.js 在底層中使用 WebGL 使 Three.js 可以輕鬆地被用於在螢幕上渲染 3D 物體。舉一個比較知名的使用 Three.js 的例子就是 HexGLA,這是一個未來派賽車遊戲。
9. PhantomJS
使用 JavaScript 工作就意味著和不同的瀏覽器打交道,同時,當提及瀏覽器的時候,就不得不討論資源管理。在 PhantomJS[16] 中,由於有 Headless WebKit 的支持,所以你可以隨時監測你的 web 應用。Headless WebKit 是 Chrome 和 Safari 使用的渲染引擎中的一部分。
這整個過程是自動化的,你所需要做的只是使用這個 API 來構建你的 web 應用。
10. BabylonJS
BabylonJS[17] 與 Three.js 不相伯仲, 提供了創建平滑而強大的 3D web 應用的 JavaScript API。它是開源的,且基於 JavaScript 和 WebGL 。創建一個簡單的 3D 物體,比如一個球體是非常簡單的,你只需要寫短短几行代碼。通過這個庫提供的 文檔[18],你可以很好地掌握它的內容。 同時 BabylonJS 的主頁上也提供了一些優秀的 demo 來當作參考。在其官網上你可以找到這些 Demo。
11. Boba.js
Web 應用總是有一個共通的需求,那就是分析。如果你還在苦於將數據的分析與統計插入到 JavaScript 的 web 應用中,那麼你可以試一下 Boba.js[19]。Boba.js 可以幫助你將分析的數據插入到你的 web 應用中並且支持舊的 ga.js 。你甚至可以把數據指標和 Boba.js 集成在一起,只需要依賴 jQuery 即可。
12. Underscore.js
Underscore.js[20] 解決了 「當我面對一個空白 HTML 頁面並希望即刻開始工作,我需要什麼」 這個問題。當你剛開始一個項目,你可能會感到失落或者重複一系列你在之前項目中常做的步驟。 為了簡化開啟一個項目的過程和給你起個頭,Underscore.js 這個 JavaScript 庫給你提供了一系列的方法。例如,你可以使用你在之前項目中常用的 Backbone.js 中的 suspender 或者 jQuery 的一些方法。
一些實用的幫助例如 「filter」 和 「invoke the map」 可以給你起個好頭,以助於你儘可能快的投入到工作中。 Underscore.js 同時還自帶了一個套件來簡化你的測試工作。
13. Meteor.js
Meteor.js[21] 是一個快速構建 JavaScript 應用的框架。它是開源的且它能夠用於構建桌面應用、移動應用和 web 應用。Meteor.js 是一個全棧的框架同時允許多平台的端到端開發。 你可以使用 Meteor.js 來實現前端和後端功能,同時它也能密切監視應用的性能。Meteor.js 的社區非常龐大,所以它會有不斷的新特性更新或者是 bug 修復。Meteor.js 也是模塊化的,同時它能配合一些其它的優秀的 API 使用。
14. Knockout.js
Knockout.js[22] 在這些庫中可能是最被低估的一個。它是一個基於 MIT 開源協議的開源 JavaScript 框架。作者是 Steve Sanderson[23]。它基於 MVVM 模式。
值得注意的是: Node.js
Node.js[24] 是一個強有力的 JavaScript 運行時環境。它可以被用於使用真實世界數據來構建快速且可擴展的應用。它既不是一個框架也不是一個庫,而是一個基於 Google Chrome 的 V8 引擎的運行時環境。你可以用 Node.js 來創建多元化的 JavaScript 應用,包括單頁應用、即時 web 應用等等。從技術層面上來講,由於它的事件驅動式架構,所以 Node.js 支持異步 I/O 。這種做法使得它成為開發高可擴展應用的一個極好的解決方案的選擇。查看 Node.js[25]在 livecoding.tv 上的視頻。
總結
JavaScript 是 web 開發中的通用語言。它之所以快速發展不僅僅是因為它所提供的內容,更多的是因為它的龐大的開源社區的支持。以上提到的框架和庫對任何一個 JavaScript 開發者來說都是必須知道的。它們都提供了一些途徑來探索 JavaScript 和前端開發。上面提及的大部分框架和庫頻繁地在 Livecoding.tv 上出現,其大部分來自對 JavaScript 及其相關技術感興趣的軟體工程師。



原文網址:https://kknews.cc/tech/mmllm2g.html

2017年6月20日 星期二

MongoDB 教程 link


http://www.runoob.com/mongodb/mongodb-indexing.html

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

内容列表

NoSQL 简介
介绍NoSQL基础概念。
MongoDB 简介
介绍MongoDB基础概念。
window平台安装MongoDB
介绍如何在window平台上安装MongoDB。
Linux平台安装MongoDB
介绍如何在Linux平台上安装MongoDB。
MongoDB 连接
介绍 MongoDB 数据库,对象,集合应用。
PHP安装MongoDB扩展
介绍PHP安装MongoDB扩展的方法。
MongoDB 插入文档
介绍MongoDB 数据插入操作。
MongoDB 更新文档
介绍 MongoDB 更新数据操作。
MongoDB 删除文档
介绍 MongoDB 删除数据操作。
MongoDB 查询
介绍 MongoDB 数据查询操作。
MongoDB条件操作符
介绍MongoDB条件操作符的使用。
MongoDB $type 操作符
介绍 MongoDB 条件操作符$type的使用。