最近在review code时发现如下code。
需求:对一批对象A进行db存储和读取操作,其中A有一个复杂对象B,表的设计有一个字段存储B的xml序列化形式。
Code:
读取时:
public A[] readA(AKey[] aKeys){
//此时a中的对象不包含B.
A[] a=db.read(akeys);
for(A ta:a){
fillB(ta);
}
return a;
}
private void fillB(A a){
//从db拿到a中b的string表示。
String bString=db.read(a.key);
//反序列化
B b=Xml.parseB(bString);
a.setB(b);
}
这明显是一个N+1操作。
解决办法之一,新建一个class AValue,用来映射A和数据库的存储。AValue中的属性除了B以外和A相同,另外多一个bString,来存储B的String表示。
public A[] readA(AKey[] aKeys){
//此时avalues中的对象包含b的string形式.
AValue[] aValues=db.read(akeys);
//对每一个aValue反序列化bString到B,构造一个A对象。
......
}
分享到:
相关推荐
冲突可串行化关注的是避免事务间的直接冲突,而目标可串行化则试图模拟所有可能的串行执行序列,但实现复杂,因此通常更注重冲突可串行化。 提交规则和先记后写规则是事务处理的关键。提交规则要求事务的所有更改在...
这包括合理设计索引,避免N+1查询问题,以及使用合适的查询方式(如JOIN操作)来减少数据库访问次数。 7. 异步操作:考虑到Android的主线程限制,数据库操作应尽量在后台线程执行,以避免阻塞UI。可以使用AsyncTask...
- 对数据的运算和操作:算法包含对数据的操作,如算术运算、逻辑运算、关系运算和数据传输。 - 控制结构:算法中各操作间的执行顺序,常用的传统流程图、N-S结构化流程图和算法描述语言等工具进行描述。 2. **...
4. **序列化和反序列化**:考虑到文件存取,B+树需要支持数据的序列化(将内存中的数据结构转换为可存储的格式)和反序列化(从存储格式恢复数据结构)。模板可以用于确保这些操作对任何数据类型都适用。 最后,...
Java源码:磁盘的KV存储 JDBM2是一个经典的键值对(Key-Value)持久化存储实现,主要用于在磁盘上存储大量数据。JDBM2是JDBM项目的一个版本,它提供了一个简单易用的API,用于在Java应用程序中实现高效的本地数据库...
数据库结构在信息技术领域中是指存储、管理和处理数据的组织方式。本部分内容着重讲解数组结构,数组是一种线性表,其特殊性在于表中的每个元素都是一个线性表,使得它能够表示多维数据结构。例如二维数组,可以看作...
8. **性能优化**:关于批量操作、缓存策略和避免N+1查询的建议。 在`doc-master`这个压缩包中,可能包含了Sequelize的官方文档源代码,这可能是一个Git仓库的主分支。通过阅读和理解这些源码,开发者可以获得更深入...
程序"是指一个简单的数学计算应用,它使用了`Do While`循环结构来执行整数序列的累加操作,即求和运算。这个程序的基本思想是初始化一个变量作为累加器,然后通过循环逐个累加整数,直到达到预设的条件。下面我们将...
9. **数据库操作**:通过Hibernate的DAO(Data Access Object)接口,可以实现对数据库的基本操作,如UserDao接口中的save、update、delete方法。 10. **序列(Sequence)**:Oracle中使用序列生成唯一ID,如USER_...
【数据库存储结构】\n\n数据库的存储结构是数据库系统设计中的重要组成部分,它涉及到数据在硬件设备上的组织方式,直接影响到数据存取的效率和数据库管理系统的性能。本章节主要探讨了数据库在磁盘、内存等存储介质...
- HQL和Criteria查询支持分页、排序、聚合函数,能更好地避免N+1查询问题。 - `join fetch`可以显式执行连接查询,避免多次查询。 - 使用`@BatchSize`指定批处理大小,提高批量读取效率。 8. **元数据信息** - ...
1. 数据序列化存储:将静态数据进行序列化,减小数据量,适用于大数据量场景,但可能会增加短期的技术债务。 2. 数据归档:将动态数据定期归档,降低主数据库负担,提供中期优化效果。 3. 中间表生成:预计算并...
19. **并发操作**:并发操作T1和T2的序列可能导致数据不一致,因此**该操作存在问题**,需要通过并发控制机制来避免。 以上就是试卷中涉及的主要数据库知识点了,这些内容涵盖了数据库系统的基本概念、数据模型、...
- **分类与功能**:操作系统可以分为批处理系统、分时系统、实时系统等多种类型,其主要功能包括处理器管理、存储管理、文件系统管理等。 **2. 多道程序设计与处理器管理** - **进程管理**:进程是操作系统进行...
20. **对象序列化**:Java对象持久化。Java对象要序列化,需实现Serializable接口。 21. **值类型**:编程语言类型。数组是引用类型,不属于值类型。 22. **数据库系统**:数据库管理系统。数据库系统减少了冗余,...
* 序列化是将对象对二进制、XML 等方式直接向文件的存储。 * 反序列化是将存储到文件的对象取出的过程。 * 事务的级别有三种:页面级、应用程序级、数据库级。 8. 数据测试如何测试? * 在 PLSQL 里对过程或函数...