<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(1512) 評論(0)  編輯  收藏 所屬分類: nosql

    主站蜘蛛池模板: 日本高清免费不卡视频| 日本免费一区二区三区| 无人影院手机版在线观看免费| 免费在线观看中文字幕| 亚洲狠狠成人综合网| 91av视频免费在线观看| 国产成人精品日本亚洲网站| 一本久久A久久免费精品不卡| 午夜私人影院免费体验区| 亚洲色偷偷综合亚洲av78 | 亚洲成a人片在线观看无码专区| 草久免费在线观看网站| 国产无遮挡吃胸膜奶免费看视频| 久久夜色精品国产噜噜亚洲a| 成全视频在线观看免费高清动漫视频下载| 亚洲精品国产成人99久久| 污污网站免费观看| 亚洲成A∨人片在线观看无码| 91高清免费国产自产| 亚洲午夜精品在线| 夜夜爽免费888视频| 日韩一区二区三区免费播放| 亚洲宅男天堂在线观看无病毒| 国产精品网站在线观看免费传媒| 亚洲毛片无码专区亚洲乱| 无人影院手机版在线观看免费 | 男人的天堂av亚洲一区2区| 免费又黄又硬又爽大片| 国产成人无码区免费内射一片色欲| 亚洲AV日韩AV永久无码绿巨人| 1区2区3区产品乱码免费| 亚洲精品久久无码| 亚洲国产精品无码久久一区二区| 最近免费中文字幕大全免费| 亚洲女子高潮不断爆白浆| 中文字幕亚洲一区二区va在线| 无码国产精品一区二区免费| 深夜福利在线视频免费| 亚洲精品福利在线观看| 亚洲伊人成无码综合网 | 国产精品免费视频观看拍拍|