一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
大家好,在下全村最野的狗
背景起源
最近公司新开发了一个非结构化数据库,该数据库可以以非结构化的形式存储图片、视频、音频、文字等数据。最牛的功能还是直接支持向量搜索。比如:
搜索与给定向量最近的10个向量。
SELECT id, vector,
distance('topK = 10')(vector, [1.0, 1.0, 1.0])
FROM test_vector
1 [1,1,1] 0
0 [0,0,0] 3
2 [2,2,2] 3
3 [3,3,3] 12
4 [4,4,4] 27
5 [5,5,5] 48
6 [6,6,6] 75
7 [7,7,7] 108
8 [8,8,8] 147
9 [9,9,9] 192
当然,重心不在数据库。
数据库开发出来了,必然要结合场景使用。该数据库基于 HTTP 协议实现通信。数据库采用通用SQL语言实现交互。比如:
查询
$ echo 'SELECT 1' | curl \
-H "X-ClickHouse-User: $MQDB_USER" \
-H "X-ClickHouse-Key: $MQDB_PASS" \
"http://$MQDB_HOST:$MQDB_PORT/" -d @-
cat << EOF |
CREATE TABLE test
(
id UInt64,
name String,
vector FixedArray(Float32, 4)
)
ENGINE = MergeTree PRIMARY KEY id
EOF
curl \
-H "X-ClickHouse-User: $MQDB_USER" \
-H "X-ClickHouse-Key: $MQDB_PASS" \
"http://$MQDB_HOST:$MQDB_PORT/" -d @-
好了。有人要说了,你不是Mybatis 源码逐句解析吗!你叭叭叭数据库干嘛那?你这人真有病。
嘿,还真别急,马上重点来了。
为什么自己造轮子
既然是最新开发的数据库,那必然没有对应的轮子。好吧,这个轮子被我接下了。
乍一看,这SQL很熟悉是吧,但是Mybatis又行不通。你问我为什么?
- 通信协议不同。
- 底层数据结构不同。
- ...
这没办法了,肯定不能用了。但是有什么是能难倒程序员的吗?源码都有了,那就自己造把!!
然后就是疯狂啃Mybatis源码。感觉差不多了有点儿心得了,献丑讲一下。
更新计划
本次文章是系列文章,会分为很多期来写,具体多少期,我也不清楚下,写明白为止。
阅读源码强烈建议:前期不要挨着读!!!调试到什么方法就看什么方法!!!
阅读源码强烈建议:前期不要挨着读!!!调试到什么方法就看什么方法!!!
阅读源码强烈建议:前期不要挨着读!!!调试到什么方法就看什么方法!!!
- 背景起源。
- 手把手带你搭建一个自己的 Mybatis 调试环境。
- Mybatis 的第一步你的一大步 之 获取配置文件 InputStream。
- Java解析 XML 配置文件之 DOM(看这一次,终生不再疑惑XML)(一)。
- Java解析 XML 配置文件之 SAX(看这一次,终生不再疑惑XML)(二)。
- Java解析 XML 配置文件之 XPATH(看这一次,终生不再疑惑XML)(三)。
- Mbatis解析 mybatis-config.xml 配置文件不过如此之 XPathParser(一)。
- Mbatis解析 mybatis-config.xml 配置文件不过如此之 XNode(二)。
- Mbatis解析 mybatis-config.xml 配置文件不过如此之 总览全局篇。
- ...待更新
- 手写 Mybatis 简简单单。
好了今天就点到为止,期待明天的更新。