作家
登录

用Python写一个NoSQL数据库

作者: 来源: 2017-05-18 13:03:15 阅读 我要评论

Commands Supported

  • PUT
    • 参数: Key, Value
    • 目标: 向数据库中插入一条新的条目 (entry)
  • GET
    • 参数: Key
    • 目标: 大年夜数据库中检索一个已存储的值
  • PUTLIST
    • 参数: Key, Value
    • 目标: 向数据库中插入一个新的列表条目
  • APPEND
    • 参数: Key, Value
    • 目标: 向数据库一一个已有的列表添加一个新的元素
  • INCREMENT
    • 参数: key
    • 目标: 增长数据库的一一个整型值
  • DELETE
    • 参数: Key
    • 目标: 大年夜数据库中删除一个条目
  • STATS
    • 参数: 无 (N/A)
    • 目标: 请求每个履行敕令的 成功/掉败 的统计信息

如今我们来定义消息的自身构造。

Message Structure

Request Messages

一条 请求消息 (Request Message) 包含了一个敕令(command),一个键 (key), 一个值 (value), 一个值的类型(type). 后三个取决于消息类型,是可选项, 非必须。; 被用作是分隔符。即使并没有包含上述可选项, 然则在消息中仍然必须有三个 ; 字符。

  1. COMMAND; [KEY]; [VALUE]; [VALUE TYPE] 

COMMAND 是膳绫擎列表中的敕令之一

  • KEY 是一个可以用作数据库 key 的 string (可选)
  • VALUE 是数据库中的一个 integer, list 或 string (可选)
  • list 可以被表示为一个用逗号分隔的一串 string, 比如说, "red, green, blue"
  • VALUE TYPE 描述了 VALUE 应当被解释为什么类型

可能的类型值有:INT, STRING, LIST

  • Examples
  • "PUT; foo; 1; INT"
  • "GET; foo;;"
  • "PUTLIST; bar; a,b,c ; LIST"
  • "APPEND; bar; d; STRING"
  • "GETLIST; bar; ;"
  • STATS; ;;
  • INCREMENT; foo;;
  • DELETE; foo;;

Reponse Messages

一个 响应消息 (Reponse Message) 包含了两个部分, 经由过程 ; 进行分隔。第一个部分老是 True|False , 它取决于所履行的敕令是否成功。 第二个部分是敕令消息 (command message), 当出现缺点时,便会显示缺点信息。对于那些履行成功的敕令,如不雅我们不想要默认的返回值(比如 PUT), 就会出现成功的信息。 如不雅我们返回成功敕令的值 (比如 GET), 那么第二个部分就会是自身值。

Examples

  • True; Key [foo] set to [1]
  • True; 1
  • True; Key [bar] set to [['a', 'b', 'c']]
  • True; Key [bar] had value [d] appended
  • True; ['a', 'b', 'c', 'd']
  • True; {'PUTLIST': {'success': 1, 'error': 0}, 'STATS': {'success': 0, 'error': 0}, 'INCREMENT': {'success': 0, 'error': 0}, 'GET': {'success': 0, 'error': 0}, 'PUT': {'success': 0, 'error': 0}, 'GETLIST': {'success': 1, 'error': 0}, 'APPEND': {'success': 1, 'error': 0}, 'DELETE': {'success': 0, 'error': 0}}

留意 socket 相干的代码已是十分极简。 固然全部办事器基于 TCP/IP 通信, 然则并没有太多底层的收集交互代码。

Show Me The Code!

我将会以块状摘要的情势来展示全部代码。 全部代码不过 180 行,读起来也不会花费很长时光。

Set Up

  1. """NoSQL database written in Python""" 
  2.  
  3. # Standard library imports 
  4. import socket 
  5.  
  6. HOST = 'localhost' 
  7. PORT = 50505 
  8. SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  9. STATS = { 
  10.     'PUT': {'success': 0, 'error': 0}, 
  11.     'GET': {'success': 0, 'error': 0}, 
  12.     'GETLIST': {'success': 0, 'error': 0}, 

  13.   推荐阅读

      交通银行信息技术管理部副总经理张漫丽:交通银行“大数据+人工智能”应用研究

    大年夜数据隐含着巨大年夜的社会、经济、科研价值,已引起了各行各业的高度看重。如不雅能经由过程人工智能技巧有效地组织和应用大年夜数据,将对社会经济和科学研究成长产生巨大年夜的推>>>详细阅读


    本文标题:用Python写一个NoSQL数据库

    地址:http://www.17bianji.com/lsqh/35303.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)