Sky's blog

          我和我追逐的夢

          常用鏈接

          統計

          其他鏈接

          友情鏈接

          最新評論

          Tokyo Tyrant基本規范(4)--協議


              Tokyo Tyrant基本規范,翻譯自Tokyo Tyrant官網。

              本節介紹Tokyo Tyrant的遠程數據庫API,Lua擴展和協議。部分細節內容沒有翻譯。

          五. 遠程數據庫API


              遠程數據庫是一組用于使用Tokyo Cabinet抽象數據庫的接口,由Tokyo Tyrant服務器作為中介。查看'tcrdb.h'獲取全部說明。

              注:該API是以.h文件提供,適用于C語言。對java開發似乎意義不大,因此考慮跳過此章節。

          六. Lua 擴展

              數據庫服務器可以在啟動時讀取通過'-ext'選項指定的Lua腳本文件。客戶端可以通過遠程數據庫API的'tcrdbext'函數來調用定義在腳本文件中的函數。

          1) 用戶自定義函數

              可以在腳本文件中定義一些任意的函數。每個函數接收2個字符串參數(key和value)。返回值將被發送回客戶端。如果函數返回'nil',服務器發送錯誤碼到客戶端。

              'tcrdbext'提供兩種類型的加鎖操作。一種是全局鎖定,意味著同一時刻僅有一個線程能操作這個函數。另外一種是記錄鎖定,意味著同一時刻僅有一個線程能操作這個指定key的記錄。

              注意Lua解釋器的實例被每個原生線程分別處理。因為Lua的全局變量無益于在遠程線程或者會話中共享數據,需要使用數據庫或者stash functions來共享數據。

          Built-in Functions

          2) 內建函數

              下列用于數據庫操作的內建函數可以在用戶自定義函數中使用。'key'和'value'參數的類型可以是string或者number。如果給出number,將被轉換為十進制字符串。

              注: 詳細的內建函數列表就不一一翻譯了,請參考原文。

              *****************************

              內建函數,名稱以'_'開頭,不能被客戶端直接調用。當服務器啟動時,如果有定義函數'_begin'則該函數被隱式的調用。當服務器停止時,如果有定義函數'_end'則該函數被隱式的調用。


              以下為內建的全局變量:

          全局變量 信息
          '_version' 服務器的版本信息
          '_pid' 進程ID
          '_sid' 服務器ID
          '_thnum' 原生線程的數目
          '_thid' 每個原生線程的ID數字


          3) 實例代碼

              下面的代碼是增加記錄的值并存儲為十進制數字的字符串的例子。這個函數可以在調用時使用記錄鎖定來保證原子性。

          function incr(key, value)
             value = tonumber(value)
             if not value then
                return nil
             end
             local old = tonumber(_get(key))
             if old then
                value = value + old
             end
             if not _put(key, value) then
                return nil
             end
             return value
          end


          七. 協議

              服務器和客戶端的協議是基于TCP/IP。默認,服務端口被綁定在本機的每個地址上,端口號位1978。每個服務器和客戶端的會話由request和response組成。服務器在同一端口上使用三種協議。

          1) 原始二進制協議

              在原始二進制協議中,請求被分類為下列命令。請求和應答的結構由命令決定。請求和應答的整型字節碼順序是big endian。

              注: 詳細的二進制協議命令就不一一翻譯了,請參考原文。

              *****************************

              客戶端可以在任意時間結束和關閉socket來結束會話。如果不關閉,則連接可以被下一次會話重用。如果發生違反協議或者某些知名錯誤,服務器會立即終止會話并關閉連接。


          2) Memcached 兼容協議

              作為memcached (ASCII)兼容協議,服務器實現下列命令: "set", "add", "replace", "get", "delete", "incr", "decr", "stats", "flush_all", "version" 和 "quit". 更新命令的"norely"選項同樣支持。但是, "flags", 

          "exptime" 和 "cas unique" 參數將被忽略。

          3) HTTP 兼容協議
              作為HTTP (1.1) 兼容協議, 服務器實現下列命令:

          命令 類似于

          "GET" 'tcrdbget'
          "HEAD" 'tcrdbvsiz'
          "PUT" 'tcrdbput'
          "POST" 'tcrdbext'
          "DELETE" 'tcrdbout'
          "OPTIONS" 'tcrdbstat'

              每個請求的URI將被作為URL編碼過的key對待。而實體內容被作為value。不過,除"Connection"和"Content-Length"外所有的header被忽略。

              "PUT"有header "X-TT-PDMODE",值可以是1(同'tcrdbputkeep'), 2(同'tcrdbputcat'), 或者其他(同'tcrdbput')。

              "POST"可以有header "X-TT-XNAME" 或 header "X-TT-MNAME"中的一個."X-TT-XNAME"等同于'tcrdbext',用于指定函數名。header "X-TT-XOPTS" 用于 bitwise-or 選項,1(記錄鎖)和2(全局鎖). 每個請求的URI將被作為URL編碼過

          的key對待。而實體內容被作為value。結果表示在應答的實體正文中。header"X-TT-MOPTS"用于 bitwise-or 選項 , 1(忽略更新日志)。 請求參數用"application/x-www-form-urlencoded"格式表示在實體正文中。名字被忽略而值被作

          為參數列表。結果在應答的實體正文中用"application/x-www-form-urlencoded"格式表示。





          posted on 2010-08-19 15:38 sky ao 閱讀(1515) 評論(0)  編輯  收藏 所屬分類: nosql

          主站蜘蛛池模板: 白朗县| 岗巴县| 阳信县| 上思县| 阆中市| 临漳县| 长寿区| 普陀区| 汉寿县| 兴仁县| 绥德县| 偏关县| 清徐县| 池州市| 衢州市| 慈溪市| 萝北县| 邯郸市| 清苑县| 江达县| 罗甸县| 镇平县| 广饶县| 龙江县| 平塘县| 新昌县| 时尚| 鹤山市| 太谷县| 昌都县| 鸡东县| 连平县| 宣武区| 娄底市| 宝坻区| 康平县| 闽侯县| 焦作市| 清新县| 新田县| 新津县|