`
zhang_xzhi_xjtu
  • 浏览: 535027 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

避免对象序列化存储时对数据库N+1操作

    博客分类:
  • db
XML 
阅读更多
最近在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对象。
    ......
}
分享到:
评论

相关推荐

    03-04数据库试卷+04-05试卷+标准答案1

    冲突可串行化关注的是避免事务间的直接冲突,而目标可串行化则试图模拟所有可能的串行执行序列,但实现复杂,因此通常更注重冲突可串行化。 提交规则和先记后写规则是事务处理的关键。提交规则要求事务的所有更改在...

    DB_Project.zip

    这包括合理设计索引,避免N+1查询问题,以及使用合适的查询方式(如JOIN操作)来减少数据库访问次数。 7. 异步操作:考虑到Android的主线程限制,数据库操作应尽量在后台线程执行,以避免阻塞UI。可以使用AsyncTask...

    二级基础考试重点(数据结构与算法+结构化程序设计的原则+软件开发基础概念+数据库系统)

    - 对数据的运算和操作:算法包含对数据的操作,如算术运算、逻辑运算、关系运算和数据传输。 - 控制结构:算法中各操作间的执行顺序,常用的传统流程图、N-S结构化流程图和算法描述语言等工具进行描述。 2. **...

    变长文件存取类库 B+树实现

    4. **序列化和反序列化**:考虑到文件存取,B+树需要支持数据的序列化(将内存中的数据结构转换为可存储的格式)和反序列化(从存储格式恢复数据结构)。模板可以用于确保这些操作对任何数据类型都适用。 最后,...

    java源码:磁盘的KV存储 JDBM2.rar

    Java源码:磁盘的KV存储 JDBM2是一个经典的键值对(Key-Value)持久化存储实现,主要用于在磁盘上存储大量数据。JDBM2是JDBM项目的一个版本,它提供了一个简单易用的API,用于在Java应用程序中实现高效的本地数据库...

    数据库结构

    数据库结构在信息技术领域中是指存储、管理和处理数据的组织方式。本部分内容着重讲解数组结构,数组是一种线性表,其特殊性在于表中的每个元素都是一个线性表,使得它能够表示多维数据结构。例如二维数组,可以看作...

    doc:序列化文档

    8. **性能优化**:关于批量操作、缓存策略和避免N+1查询的建议。 在`doc-master`这个压缩包中,可能包含了Sequelize的官方文档源代码,这可能是一个Git仓库的主分支。通过阅读和理解这些源码,开发者可以获得更深入...

    1+2+3...程序,用do while循环方法求整数的和运算,VB.net2008源代码

    程序"是指一个简单的数学计算应用,它使用了`Do While`循环结构来执行整数序列的累加操作,即求和运算。这个程序的基本思想是初始化一个变量作为累加器,然后通过循环逐个累加整数,直到达到预设的条件。下面我们将...

    Struts2.3.6+hibernate4.3.5+Spring 4.0.5+oracle 10g的集成

    9. **数据库操作**:通过Hibernate的DAO(Data Access Object)接口,可以实现对数据库的基本操作,如UserDao接口中的save、update、delete方法。 10. **序列(Sequence)**:Oracle中使用序列生成唯一ID,如USER_...

    数据库原理第五章PPT课件.ppt

    【数据库存储结构】\n\n数据库的存储结构是数据库系统设计中的重要组成部分,它涉及到数据在硬件设备上的组织方式,直接影响到数据存取的效率和数据库管理系统的性能。本章节主要探讨了数据库在磁盘、内存等存储介质...

    Hibernate API

    - HQL和Criteria查询支持分页、排序、聚合函数,能更好地避免N+1查询问题。 - `join fetch`可以显式执行连接查询,避免多次查询。 - 使用`@BatchSize`指定批处理大小,提高批量读取效率。 8. **元数据信息** - ...

    后端思维之数据库性能优化方案.doc

    1. 数据序列化存储:将静态数据进行序列化,减小数据量,适用于大数据量场景,但可能会增加短期的技术债务。 2. 数据归档:将动态数据定期归档,降低主数据库负担,提供中期优化效果。 3. 中间表生成:预计算并...

    数据库试卷及答案.doc

    19. **并发操作**:并发操作T1和T2的序列可能导致数据不一致,因此**该操作存在问题**,需要通过并发控制机制来避免。 以上就是试卷中涉及的主要数据库知识点了,这些内容涵盖了数据库系统的基本概念、数据模型、...

    数据库重点

    - **分类与功能**:操作系统可以分为批处理系统、分时系统、实时系统等多种类型,其主要功能包括处理器管理、存储管理、文件系统管理等。 **2. 多道程序设计与处理器管理** - **进程管理**:进程是操作系统进行...

    2021-2022计算机二级等级考试试题及答案No.9738.docx

    20. **对象序列化**:Java对象持久化。Java对象要序列化,需实现Serializable接口。 21. **值类型**:编程语言类型。数组是引用类型,不属于值类型。 22. **数据库系统**:数据库管理系统。数据库系统减少了冗余,...

    Oracle常见面试题.pdf

    * 序列化是将对象对二进制、XML 等方式直接向文件的存储。 * 反序列化是将存储到文件的对象取出的过程。 * 事务的级别有三种:页面级、应用程序级、数据库级。 8. 数据测试如何测试? * 在 PLSQL 里对过程或函数...

Global site tag (gtag.js) - Google Analytics