- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个新应用程序将插入大量数据,并且必须能够每秒处理多次插入。数据库模式由两个表组成:HEADER 和 DETAIL 表。 HEADER 表包含一些最少的信息,DETAIL 表包含不会更新的大量数据。
HEADER 记录对 ID 字段有 PK 约束。 ID 值由序列生成器在插入时创建。 DETAIL.HEADER_ID 字段对 HEADER.ID 字段具有 FK 约束。
我的问题是哪个选项执行最快的插入?这将在 Weblogic 11g、Oracle 11g 上运行。每秒插入次数超过 1000 次。
1)在HEADER插入上使用JDBC的Statement.RETURN_GENERATED_KEYS选项,获取生成的键,然后插入DETAIL记录。
2)首先调用sequence.nextval,然后插入HEADER记录,然后插入DETAIL记录。
3) 以某种方式获取序列 ID block ,插入所有 HEADER 记录,然后插入所有 DETAIL 记录。 (如何获取序列 ID block ?)。
最佳答案
1)
我建议使用HILO算法来生成所有ID。每个表使用不同的顺序。对于 HILO alg,使用的分配大小约为 1000。这意味着 select nextval 将每 1000 条记录执行一次。
2)
使用 jdbc 批量插入,其大小为 HILO 分配大小的倍数。例如2000、3000等。
3)
检查您的数据库是否可以在一个事务中处理这么多记录。如果不是,您可能应该在每次批量插入后提交 tx。
--
我使用这些模式通过即时 Java 处理将 3 亿条记录从一个系统迁移到另一个系统。在某些表中插入速度超过5000条记录/秒。
广告 1) - 实现 HILO
public interface IdentifierGenerator {
int getNextId();
}
希洛发电机:
public class HiLoSequenceGenerator implements IdentifierGenerator {
private String sequenceName;
private int allocationSize;
private IdentifierDao dao;
private boolean initialized;
private int min;
private int max;
private int next;
public HiLoSequenceGenerator() {
}
public HiLoSequenceGenerator(String sequenceName, int allocationSize, IdentifierDao dao) {
this.sequenceName = sequenceName;
this.allocationSize = allocationSize;
this.dao = dao;
}
@Override
public int getNextId() {
return next();
}
private synchronized int next() {
if (!initialized) {
alloc();
initialized = true;
}
if (next > max) {
alloc();
}
return next++;
}
private void alloc() {
// fetch unique number from sequence
int unique = dao.getUniqueId(sequenceName);
// prepare buffer (pool of identifiers)
min = unique * allocationSize;
max = min + allocationSize - 1;
next = min;
if (log.isTraceEnabled()) {
log.trace("allocated id buffer based on " + sequenceName + ": [" + min + " - " + max + "]");
}
}
在这里您可以看到 HILO 如何使用分配大小 3 和 mockito 单元测试:
public class HiLoSequenceGeneratorTest {
@Test
public void test() {
// given
IdentifierDao dao = mock(IdentifierDao.class);
when(dao.getUniqueId(anyString())).thenReturn(3, 4, 10, 11);
HiLoSequenceGenerator gen = new HiLoSequenceGenerator("seq", 3, dao);
// 3: 9, 10, 11
// 4: 12, 13, 14
//10: 30, 31, 32
//11: 33, 34, 35
// when - then
assertEquals(9, gen.getNextId()); // hit db
assertEquals(10, gen.getNextId());
assertEquals(11, gen.getNextId());
assertEquals(12, gen.getNextId()); // hit db
assertEquals(13, gen.getNextId());
assertEquals(14, gen.getNextId());
assertEquals(30, gen.getNextId()); // hit db
assertEquals(31, gen.getNextId());
assertEquals(32, gen.getNextId());
assertEquals(33, gen.getNextId()); // hit db
assertEquals(34, gen.getNextId());
assertEquals(35, gen.getNextId());
}
}
关于java - 以最小的开销插入两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25857568/
我想知道,通过数据 channel 发送数据时 WebRTC 会产生多少开销。 我知道 Websockets 每帧有 2 - 14 字节的开销。 WebRTC 是否使用更多开销?我在网上找不到一些有用
我想知道与创建新类而不是该类的新对象相关的开销是小还是大。我正在使用 dojo,但我将提供纯 JS 的示例。我将在启动时创建 10 到 100 个对象,我认为这不会是一个严重的问题,但我想涵盖所有基础
我有一个如下所示的表设置。 Table comment_flags user_id comment_id 我允许用户标记评论,然后给他们取消标记的选项,因为他们可能犯了一个错误。 问题
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: In MySQL what does “Overhead” mean, what is bad about it,
我正在制作一个非常简单的游戏,只是为了好玩/练习,但无论它现在有多简单,我仍然想很好地编写它,以防我想回到它并只是为了学习 因此,在这种情况下,我的问题是: 对象分配涉及多少开销?解释器对此的优化程度
我有一些资源敏感的东西要写。我想知道与仅将这些变量一起传递(例如作为函数参数)相比,在结构中将变量组合在一起是否真的会导致内存开销。 如果是这样,那么在不产生开销的情况下创建对惰性值进行操作的东西的好
我一直在开发一个实时应用程序,并注意到一些 OOP 设计模式在 Python 中引入了难以置信的开销(使用 2.7.5 进行了测试)。 直截了当,当字典被另一个对象封装时,为什么简单的字典值访问器方法
我正在从 ifstream 中读取随机 ascii 文本文件。我需要能够将整个消息放入字符串类型以进行字符解析。我当前的解决方案有效,但我认为我通过使用等效于此的方式来谋杀更冗长文件的处理时间: st
纯粹从软件工程的角度来看,getActivity() 有多少开销? 我在整个应用程序中经常多次使用此方法,并考虑使用一个引用 getActivity() 的全局变量。 如果为 Activity 设置一
我一直在研究 Riccardo Terrell 的 Akka.NET 分形演示 (https://github.com/rikace/akkafractal) 以尝试理解它。 (这很棒,顺便说一句)
我正在尝试使用高分辨率计时器查找我的代码运行时间,我注意到计时器的结果不一致,我想知道为什么会这样。 我找到了这篇文章 How do you test running time of VBA code
我正在学习WPF。我现在开始装订了。使用 INotifyPropertyChanged 时绑定(bind)是否依赖反射?是这样,价格是多少?我正在考虑使用 WPF 来显示通过 UDP 流式传输的数据,
我有某种模板化基类 template class Base { }; 并希望将其派生实例存储在列表中。为此,我使用 using derived_handle = std::unique_ptr v
使用GHC.TypeLits中的Sing有任何开销吗? ?以程序为例: {-# LANGUAGE DataKinds #-} module Test (test) where import GHC.T
我有某种模板化基类 template class Base { }; 并希望将其派生实例存储在列表中。为此,我使用 using derived_handle = std::unique_ptr v
我有一个 ORM sqlalchemy 模型,我需要构建一个查询(使用 ORM 类更容易构建),但这需要大量时间。当我直接像 SQL 一样向数据库执行相同的查询时,速度相当快。 使用 SQLAlche
我在 PHP 平台上有一家商店(开发不善),那里有很多不好的查询(没有索引的长查询、rand() 排序、动态计数,..) 我现在无法更改查询,但我必须调整服务器才能保持事件状态。 我尝试了我所知道的一
我有一个使用 JQuery mobile 构建的移动应用程序,响应时间对我来说非常重要,因为我希望为我的用户提供流畅的体验。 我刚刚将网站的安装移至本地服务器,以提高应用程序的性能,因为它连接到本地
关于数据库设计的问题。如果我有 28 个 bool 值并且能够将它们添加为每行 28 个 bool 值或一个整数,哪一个会更快?哪种方法将使磁盘上的表大小保持最低? 这是在假设我需要的可以通过查询中的
我有一个看起来像 Boost.Array 的简单类。有两个模板参数 T 和 N。Boost.Array 的一个缺点是,每个使用这种数组的方法都必须是带有参数 N 的模板(T 可以)。结果是整个程序往往
我是一名优秀的程序员,十分优秀!