消息隊列系統 Karait
Karait是一個消息隊列系統,其消息存儲采用了MongoDB的Capped Collections結構,這一結構的特點就是集合的大小可設定,當數據大小超出設定大小時,新數據會抹掉舊數據。
Karait目前提供Python和Ruby的客戶端操作包,也就是說你可以使用Python或Ruby來寫消息,用Python或Ruby來讀隊列。
項目地址:https://github.com/bcoe/karait
Ruby 版本示例代碼:
require 'karait' queue = Karait::Queue.new( :host => 'localhost', # MongoDB host. Defaults to localhost. :port => 27017, # MongoDB port. Defaults to 27017. :database => 'karait', # Database that will store the karait queue. Defaults to karait. :queue => 'messages', # The capped collection that karait writes to. Defaults to messages. :average_message_size => 8192, # How big do you expect the messages will be in bytes? Defaults to 8192. :queue_size => 4096 # How many messages should be allowed in the queue. Defaults to 4096. ) queue.write({ :name => 'Benjamin', :action => 'Rock' }) # or message = Karait::Message.new message.name = 'Benjamin' message.action = 'Rock!' queue.write(message, :routing_key => 'my_routing_key', :expire => 3.)
MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bjson格式,因此可以存儲比較復雜的數據類型。 Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:
- 面向集合存儲,易存儲對象類型的數據。
- 模式自由。
- 支持動態查詢。
- 支持完全索引,包含內部對象。
- 支持查詢。
- 支持復制和故障恢復。
- 使用高效的二進制數據存儲,包括大型對象(如視頻等)。
- 自動處理碎片,以支持云計算層次的擴展性
- 支持RUBY,PYTHON,JAVA,C++,PHP等多種語言。
- 文件存儲格式為BSON(一種JSON的擴展)
- 可通過網絡訪問
所謂“面向集合”(Collenction-Orented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collenction)。每個 集合在數據庫中都有一個唯一的標識名,并且可以包含無限數目的文檔。集合的概念類似關系型數據庫(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。
模式自由(schema-free),意味著對于存儲在mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫里。
存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標識一個文檔,為字符串類型,而值則可以是各中復雜的文件類型。我們稱這種存儲形式為BSON(Binary Serialized dOcument Format)。
MongoDB服務端可運行在Linux、Windows或OS X平臺,支持32位和64位應用,默認端口為27017。推薦運行在64位平臺,因為MongoDB
在32位模式運行時支持的最大文件尺寸為2GB。
MongoDB把數據存儲在文件中(默認路徑為:/data/db),為提高效率使用內存映射文件進行管理。