-
Notifications
You must be signed in to change notification settings - Fork 4
Home
欢迎访问 共价键 的中文维基
不怎么会写,但作为系统设计开发又不得不有的文档 😂
1. 挂载虚拟设备
“共价键” 是一个 我们设计的 数据中间件 的命名,这个数据中间件是 2022-2023 秋季的系统设计开发大作业,由七牛命题。
数据中台(数据中间件) 是一个连接着前端和后端之间的一个中间角色。其目的是为了进一步解耦前端和后端(虽然,但是,解耦两个物体实际上会造成第三方物体的耦合的,连接关系是不变的),进而更加方便两端的人员快速的开发和实现一些需求。
我们的数据中间件建设依赖于如下的限制:
- 只有关系型数据库可以接入。
- 我们最终的目标只提供 SQL型数据库接入,但是留出快速编写的接口给 MonGo 等数据库以便后期二次开发。
计算图和流是我们整个框架的基础,我们认为在处理多个远程连接的任务上,不论是在数据的获取和处理阶段,图都能做到如下的优点:
- 图数据结构可以很好的管理异步节点之间的关系,以期待获得更好的性能。
- 图可以很好的拆分操作符,我们只需要提供几个基础的元操作符,用户就可以使用这些操作符进行很多自由的组合来扩大表示范围。
为了加大程序的拓展性,并且利于开发人员手工编写适合于不同情况的数据合并场景,我们将 C++ 与 Lua 绑定,将 C++ 的运行时共享给 Lua。 得益于 LuaJIT 优异的性能表现,以及与 C++ 运行时近乎于零开销的互相调用,通过 Lua 构建的图和编写的算子有较高的性能。
在一个 Lua 文件里我们会帮你定义好 ThisGraph 这个类,你只需要直接用就行了。在一个 Lua 文件里也就只能存在一个 ThisGraph 类的实体。 我们会帮你初始化 Lua 的运行堆栈,所以你不需要 require('libCB')
,当然,多 require 一次也是无所谓的。我们的 Lua 文件在运行时会内嵌在 C++ 运行时中进行直接互相交互,这意味着两个运行时是同时存在的,所以图的执行并不是如 tf、torch 一类框架这样显示指定的,Lua 脚本只是一种与 C++ runtime 进行交互的手段。
下面的 Lua 代码创建了一张最简单的计算图:把 两个 MySQL 算子传递给一个 Combine 算子。
需要注意的是,如 ThisGraph:createVirtualDeviceNode(0);
这个使用方式所示,在创建虚拟设备节点的时候,需要直接显示的给出连接的编号。连接的编号可以是相同的,但是建议使用不同的连接编号。在你创建一个设备的时候会给出连接编号,如果这个连接被占用了,那么其他需要使用这个连接的虚拟节点会被等待。所以,如果两个设备节点之间没有什么数据关联的话,建议使用两条不同的连接,以使虚拟节点之间能够异步,来获得更好的性能。
node_vd_1 = ThisGraph:createVirtualDeviceNode(0);
node_vd_2 = ThisGraph:createVirtualDeviceNode(1);
node_vd_1:addQuery("SELECT * FROM runoob_tbl;");
node_vd_2:addQuery("SELECT * FROM runoob_tbl_2;");
node_vd_combine = ThisGraph:createCombineNode({"PrimaryKey1", "PrimaryKey2"}, "NewTable");
node_vd_1:PointTo(cb.F.refNode(node_vd_combine));
node_vd_2:PointTo(cb.F.refNode(node_vd_combine));
function myCombineOp(baseOpPtr, primaryKeys)
local inputs = baseOpPtr.io.I; -- vector.
local output = baseOpPtr.io.O; -- virtual table.
-- this program is a default behavior of combine operation.
if #inputs ~= #primaryKeys then
print("[ CB engine Error ] when execute Cb.Op.CombineOp. #inputs ~= #primaryKeys");
return;
end
-- some logic to combine tables.
end
node_vd_combine.overrideFunc(myCombineOp);
ThisGraph:addCacheServer(ThisGraph:createRedisCachingNode(0));
OS: Ubuntu20.04 LTS(core part) / Ubuntu20.04 LTS-WSL(core part) / Win10(For MySQL server only) OS: Arch=amd64
cpp Compiler: Clang v12+ / GNU 9.4+
CMake V3.24+
LuaJIT V2.1+
Python V3.9+ (used in django. For server only.)
-
workflow Sogou`s C++ server engine which can satisfy most C++ back-end development requirements.
-
sRPC An enterprise-level RPC system -
gLog Google logging module -
fmt A modern formatting library
-
protobuf Protocol Buffers - Google's data interchange format -
redis in-memory database that persists on disk.
-
rapidJson A fast JSON parser/generator for C++ with both SAX/DOM style API
-
zeroMQ attention👀, this lib may not be used.workflow
provide a message queue already. -
LuaJit Integrate in. For hot update.
-
lz4 Extremely fast compression
-
sol2 bind C++ and lua.
我们发布了 Release 版本,你可以在本仓库的 Release 页面看到发布的软件包。直接解压后就可以直接使用,你也可以对库和可执行文件建立软连接到系统 lib / bin 中。
请确保你已经正确安装了 第三方库依赖
章节所提及的库。在编译可执行文件之前,你需要首先编译 预编译头文件。所有的编译出来的文件都会存放在 covalentBond/bin/ 目录中。
git clone https://github.com/chenghuaWang/covalentBond.git
cd covalentBond
mkdir build
cd build
cmake ..
# build pre-compiled head and cb-server.
cmake --build . -j 4 --target cb-pch
cmake --build . -j 4 --target cb-server
# run the ctest
ctest
cd ..
rm -rf build
Made with contrib.rocks.