(一)存储选择:微型对象数据库

这里是随笔,不会详述内容,下面都是用实验样例来解释说明。不明白的可以闪人了。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

1。微型对象数据库

例:

{

    "食指":{

        "对象名":"食指"

        "左右手":"左手"

        "属性":[

            {"重量":"0.1公斤"},

            {"肤色":"黄"},

            {"皮肤面积":"0.05平米"},

            {"血":"0.001公斤"},

            {"骨":"0.002公斤"},

            {"皮":"0.001公斤"},

            {"肉":"0.005公斤"},

            {"指甲":{...}},

            。。。

        ]

        "行为":[

            {"掌":""},

            {"拳":""},

            {"1":"手势"},

            {"指示方向":"手势"},

            {"勾勾手":"手势,来我这儿"},

            。。。

        ]

   }

}

1.1 NOSQL库实现

1.1.1 对象类型

enum OB_ENDOBJ_TYPE_T {
 OB_ENDOBJ_UNKNOWN = -1,
 OB_ENDOBJ_NULL = 1,
 OB_ENDOBJ_BOOL = 2,
 OB_ENDOBJ_INTEGER = 3,
 OB_ENDOBJ_DOUBLE = 4,
 OB_ENDOBJ_STRING = 5,
 OB_ENDOBJ_ARRAY = 6,
 OB_ENDOBJ_OBJECT = 7
};

1.1.2 结构定义

typedef struct _OB_RESULT_T {  

bool result;  

unsigned char* msg;

 unsigned int code;

}OB_RESULT_T, *POB_RESULT_T;

typedef struct _OB_ENDOBJ_T {

 enum OBJ_TYPE type;

 size_t len;

 unsigned char * name;

 unsigned char * value;

}OB_ENDOBJ_T, *POB_ENDOBJ_T;

typedef struct _OB_TREE_NODE_T {

 POB_ENDOBJ_T obj;

 struct _OB_TREE_NODE_T* before;

 struct _OB_TREE_NODE_T* next;

 struct _OB_TREE_NODE_T* parent;

 struct _OB_TREE_NODE_T* child;

}OB_TREE_NODE_T, *POB_TREE_NODE_T;

typedef struct _OB_TREE_HEAD_T {

 unsigned char ob_name[256];

 unsigned char ob_hash[1024];

 unsigned char ob_version[10][256];

 POB_TREE_NODE_T root;

}OB_TREE_HEAD_T, *POB_TREE_HEAD_T;

1.1.3 数据操作方法

1.1.3.1 方法定义

// 创建对象 操作方法定义

OB_API bool __stdcall ob_new_obj_null(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_obj_bool(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_obj_integer(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_obj_double(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_obj_string(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len, size_t stringlen);
OB_API bool __stdcall ob_new_obj_array(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len, enum OBJ_TYPE type, size_t count);

// 创建对象节点 操作方法定义

OB_API bool __stdcall ob_new_node_null(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_node_bool(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_node_integer(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_node_double(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_node_string(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len, size_t stringlen);
OB_API bool __stdcall ob_new_node_array(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len, size_t stringlen, enum OB_ENDOBJ_TYPE type, size_t count);

// 遍历

POB_TREE_NODE_T _stdcall root(POB_TREE_HEAD_T head);
POB_TREE_NODE_T __stdcall next(POB_TREE_NODE_T pnode);
POB_TREE_NODE_T __stdcall before(POB_TREE_NODE_T pnode);
POB_TREE_NODE_T __stdcall child(POB_TREE_NODE_T pnode);
POB_TREE_NODE_T __stdcall parent(POB_TREE_NODE_T pnode);

 

// 创建对象存储

OB_API POB_TREE_HEAD_T __stdcall new_ob(unsigned char* ob_name, size_t name_len, unsigned char* ob_version, size_t ver_len);

OB_API bool __stdcall delete_ob(POB_TREE_HEAD_T head);

// 对象节点 增删改操作方法定义

OB_API bool __stdcall new_root(POB_TREE_HEAD_T head, POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);

OB_API bool __stdcall insert_node(POB_TREE_NODE_T pcurrentnode, POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);

OB_API bool __stdcall delete_node(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄