DB写操作中的Java并发

标签 java database multithreading jdbc sybase

我有一个场景需要在数据库表中插入 16k 条记录。因此,除了正常的数据库批量插入外,我还创建了 Callable 任务,它将占用相应的批处理(500 条记录的大小)并将以独立的方式进行插入。我很想知道底层数据库将如何接受这些请求。页面级别的数据库锁定是否会阻塞其余的 Java 线程,直到第一个包含 500 条记录的线程被提交?

最佳答案

我的答案是针对 Sybase ASE。对于 Sybase IQ,请参阅 Guillaume 的回答。

Does database locking at page level will block rest of java threads until first thread with batch of 500 records get committed?

这取决于您设置的锁定粒度。 According to Sybase's doc ,一共有三种锁定粒度:

  • Allpages locking, which locks datapages and index pages
  • Datapages locking, which locks only the data pages
  • Datarows locking, which locks only the data rows

因此,如果您选择Allpages,您的线程将阻塞,直到提交当前批处理。否则,您的线程不会阻塞,但自然会产生更高的锁定开销。

有关 Sybase ASE 锁定粒度的完整详细信息,see this documentation .

关于DB写操作中的Java并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107284/

相关文章:

c# - 在 C# ASP.NET 中,Java 中的同步块(synchronized block)等效于什么?

sql - 一列多外键情况

database - 数据库模式与数据库表空间?

c++ - 使用具有共享全局变量的线程

python - 如何在某些C代码执行某个线程时保持python脚本打开?

java - CloudFoundry 中部署的线程池代码不起作用

java - 如何截取自定义形状的屏幕截图?

java - 如何在 Spring Boot 中处理最大文件大小异常?

JavaFX 未随 Java 8 一起导入

MySQL通过外键分区