2024.1.12
2024.5.13
24
1 min
Oracle 是可以支持 中文空格的(\u3000)。因此 shardingSphere 的解析也需要支持。
查询 antlr4 的定义,首先我们遇到中文空格要像遇到英文空格一样跳过。
WS
: [ \t\r\n\u3000] + ->skip
;
其次还需要将自定义的字符中排除 \u3000
没有找到正确的排除方法。因此考虑在范围定义中跳过 \u3000
IDENTIFIER_
: [A-Za-z\u0080-\u2FFF\u3001-\uFF0B\uFF0D-\uFFFF]+[A-Za-z_$#0-9\u0080-\u2FFF\u3001-\uFF0B\uFF0D-\uFFFF]*
;
完美解决
2024.1.10
2024.5.13
12
1 min
OPE 加密算法全称是 Order Preserving Encryption。加密后的内容依然具有原始数据的顺序性,如果实现了该算法后,SQL 可以支持密文的 range 查询和排序。
https://github.com/aymanmadkour/ope 该开源代码是 ope 的算法实现,可以实现数字,字符串的加密有序性。
2023.12.21
2024.5.13
database
262
2 mins
问题描述
今天遇到一个奇怪的问题,我将运行中的 statement 信息缓存到内存集合中,通过另一个线程调用 statement.cancle() 接口,发现无论如何都取消不了,需要等到 statment 运行完,才能取消,可是这个取消已经没有意义了。
我的代码如下:
1
2
3
4
5
6
7
for ( Statement each : process . getDistributedJoinProcessStatements (). values ()) {
if ( null != each ) {
if ( ! each . isClosed ()) {
each . cancel ();
}
}
}
我发现 debug 无论如何也走不下去,于是我不断点,每次卡住的时候就 dump 出结果
2023.12.15
2024.5.13
384
2 mins
项目地址: https://github.com/brettwooldridge/HikariCP
“Simplicity is prerequisite for reliability.”
- Edsger Dijkstra
最先强调的就是简单,扁平,性能,做了 字节码级别的优化。
配置简单,很多东西选择不做,例如 statement 缓存。
pool size 比想象的要小的多,这样更能拥有更好的性能。因为单 cpu 并非并行,上下文切换需要时间,另外查询的位置需要来回切换等等。
不过 IO wait 比较大时,那么并发时能够提升的。
另外对于大事务和短事务,比较难以协调,这时候最好搞两个 pool。
HikariCP 怎么学习
考虑编译起来,然后运行 test 查看代码逻辑
通过 IDEA 运行时发现总会报
Error occurred during initialization of boot layer FindException: Module not found
后来发现 mvn clean 之后,可以运行,但是有部分代码是会在编译阶段被更改,因此还得 install 之后在跑
但是 idea 运行之前会 build 然后就改变了 target 下部分代码。
所以需要勾选运行前不 build 即可解决问题。
2023.12.7
2024.11.29
Tech
16
1 min
最开始是通过官方网站上这本书来学习
https://doc.rust-lang.org/book/
通读之后开始学习 https://github.com/rust-lang/rustlings/
中间参与了一个开源项目 https://github.com/database-mesh/pisanix/tree/master
最近开始学习 https://exercism.org/tracks/rust
最近 rust 学习又有了一些新突破
从零手写文本编辑器 https://www.flenker.blog/hecto/ 这个教程里分成了多个 commit 带着你一步步的完成编辑器,看着自己的代码逐步变成可以使用的文本编辑器,真的很不错哦。