codefollower

Results 225 comments of codefollower

嵌入式场景,如果 jdbc url 里指定的数据库不存在,会自动创建它, 如果没有传递用户名和密码,默认用户名是 root,密码是空的。 出现这个异常,需要看看那个 Model 子类对应的数据库名是否跟 jdbc url 里指定的数据库一样。 如果你是用 create-lealone-app-5.0.0 创建的微服务应用, 检查一下 xxx-test\src\test\resources\lealone.yaml 的 jdbc_url 参数是否跟 xxx-main\src\main\java\------\main\XxxSqlScript.java 里的 runScript 中的 jdbcUrl 一样。 如果都不是,把数据目录删除重新建表,再跑一下试试。

客户端建了几个连接做批量写入? 调度线程不会挂住的,如果客户端开了几个连接写入,可能其中之一锁住了某个 page 没有释放,导致其他线程不能写这个 page,但是其他线程并不会被挂起,只是无法完成写入操作,不能给客户端发回响应,所以客户端感觉自己被挂起了。 如果是没有释放 page 锁的问题,可能是新引入的并发控制算法的代码哪里还有 bug。

我写了一个 org.lealone.test.client.BatchTest.testConcurrentBatch() 目前不能重现问题, 你把你的建表 sql 和执行批量的 sql 发出来我看看能不能复现。

insert 还有 bug,我最近做压测也发现了,正在查找问题中

> 这个想法也一直盘旋在我的脑海中,方便加个微信,保持交流么? 流计算不做了,现在只关注湖仓一体。

> 我目前看到的主要是在执行逻辑里加入 `yieldIfNeeded` 来让出自己的执行阶段,所以大体思路还是非抢占式的对吗? 高优先级的事务(sql)可以抢占低优先级的。

> > 高优先级的事务(sql)可以抢占低优先级的。 > > 抢占部分的逻辑是如何实现的呢?求思路求代码链接🙏 你先把 lealone-test.yaml 中的 scheduler_count 参数改为1,然后在 IDE 中用 debug 的方式启动 TcpServerStart。 接着随便建一张表,insert 几千条记录,接着在 org.lealone.sql.query.QFlat.run() 的循环代码里打个断点, 然后打开一个 client,输入一条普通的 select 语句,这时 ScheduleService-0 线程就会执行到 QFlat.run(),再打开另一个 client 输入一条 insert...

lealone 支持三种日期时间类型,是严格遵循 jdbc 规范的 TIME 对应 java.sql.Time DATE 对应 java.sql.Date TIMESTAMP 对应 java.sql.Timestamp mybatis plus 我不熟,不清楚它为什么全映射成 java.util.Date,哪怕是 DATE 类型,也是 java.sql.Date 啊。

错误提示是你在客户端传给 TIMESTAMP 字段的值是一个无法解析的字符串,是不是在客户端设置字段参数值时错了。

如果表字段是 TIMESTAMP 类型,然后用 java.time.LocalDateTime.now().toString() 变成字符串写入 TIMESTAMP 类型的字段是可以解析的,这个我刚试了,java.time.LocalDateTime.now().toString() 会返回 “2023-05-15T22:15:52.086” 这种格式, 你给出的错误提示显然字符串很特殊,并不是一个有效的格式。