`
struggle2036
  • 浏览: 6750 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate Search(基于version3.4)--第二章Archetype

阅读更多

原文:http://sin90lzc.iteye.com/blog/1098564

Archetype

 

2.1概述

Hibernate Search由建立索引和索引搜索两个组件组成,并且都是基于Apache Lucene。

 

每次一个实体从数据库中被插入,更新或移除,Hibernate Search会跟踪这些事件并维护index的更新。所有index更新工作都会由Hibernate Search完成而不需要你去使用Lucene API。

 

为了与Lucene的index交互,Hibernate Search有一个DirectoryProvider的概念。DirectoryProvider会管理Lucene中的Directory类型。你可 以配置DirectoryProvider来调整Directory的类型。

 

Hibernate Search通过Lucene Index来搜索实体,返回持久化的实体列表,这样你就不需要花时间把对象映射到Lucene document的工作。另外,Hibernate和Hibernate Search之间持久化上下文是共享的。事实上,FullTextSession是基于Hibernate Session建立的,因此在应用中可以使用统一的org.hibernate.Query 或 javax.persistence.Query API,如通过HQL,JPAQL或本地查询。

 

为了得到更好性能,Hibernate Search捆绑了Lucene Index写操作。当前有两种的捆绑方式,第一种是没有事务处理的,index更新操作是在实际的数据库操作之后进行。另一种是在运行中的事务 中,index的更新操作是在事务的提交阶段,当事务回滚时放弃更新。这个捆绑范围是基于事务。这有两处好处:

  • 性能更好:当操作是在捆绑中运行,Lucene的indexing能工作得更好。
  • ACID:工作的过程与数据库的事务捆绑在一起,仅当事务提交时工作才会被执行。严格来说,这并不是ACID,但ACID对于全文搜索来说并不是很有用的,因为index可以通过数据源重建。

你可以这样理解两种捆绑模式(no scope vs transactional),它们就好像是auto commit vs transactional的表现一样。从性能的角度来看,推荐使用基于事务的模式。no scope模式是透明,Hibernate Search会探测当前的事务并调整范围。

 

Tip :It is recommended - for both your database and Hibernate Search - to execute your operations in a transaction, be it JDBC or JTA.

 

Note :Hibernate Search works perfectly fine in the Hibernate / EntityManager long conversation pattern aka. atomic conversation.

 

Note :Depending on user demand, additional scoping will be considered, the pluggability mechanism being already in place.

 

2.2后端

Hibernate Search可以让批处理工作交给不同的后端来处理。Hibernate Search提供了三种开箱即用的后端,你可以选择去嵌入到你的实现中。

 

2.2.1后端类型

2.2.1.1 Lucene

在这种模式下,所有的index更新操作会应用到同一个index。这种模式的index是共享的并要小心地处理锁操作,可以应用于集群环境或非集群环境。这种模式的优点是简单并在查询时可以立即看到改变。

 

2.2.1.2 JMS

所有的index更新操作会把更新操作的命令发送到JMS队列。一个唯一的reader会处理JMS队列并更新主index。之后,主index将 会被复制到各个从index。这就是众所周知的主/从模式。主方唯一的责任是维护index的更新,从方可以接受写和读的操作。然而从方只会对本地 index进行读操作,而把写操作委托给主方。

这种模式面向的是集群环境,并有很高的吞吐量,而且可以接受index的延迟更新。可靠性由JMS provider和本地的index副本来确保。

 

2.2.1.3 JGroup

JGroups工作模式与JMS相似,也同样设计成主/从模式。不同的是,JGroup使用自身的工具包完成复制工作。当对响应时间要求比较严格时,考虑使用JGroup模式,不过不支持JNDI服务。

 

2.2.2建立索引工作的运行

indexing可以运行在事务提交的同步方式,或异步方式。

 

2.2.2.1同步方式

这是一种安全的,因为indexing与事务提交相一致。在高并发环境中,这会限制了应用的吞吐量(由于Lucene的锁机制),如果后端运行比事务处理更慢或有大量的IO操作的话,这将增加系统的响应时间。

 

2.2.2.2异步方式

这种方式后端委托indexing工作由不同的线程来完成。这样的话,吞吐量与响应时间将与后端的性能无关。该方式的缺点是在事务提交后,index更新操作会有一些延时,并要花一点开销来管理线程。

 

推荐先使用同步方式,当因为同步方式而出现性能问题时再应用异步方式。

 

2.3Reader strategy

当执行一个查询,Hibernate Search与Lucene index交互是通过reader strategy。选择怎么样的reader strategy依赖于应用的实际情况(经常更新,多数情况只读,异步方式更新index)。

 

2.3.1Shared策略

这种策略下,Hibernate Search将共享同一个IndexReader,不管是不同的查询(query)还是不同的线程,都会保持IndexReader up-to-date。IndexReader由多个SegmentReader组成。这种策略只会重新打开修改过的或新生成的segment,那些没修 改过的segment将会重用。

 

2.3.2 Not-shared策略

每执行一次查询,便重新生成一次IndexReader,这种策略是低效的,因为打开一次IndexReader是相当大的资源消耗。

 

2.3.3 Custom

你自定义一个reader strategy通过实现org.hibernate.search.reader.ReaderProvider。这个实现必须是线程安全的。

 

分享到:
评论

相关推荐

    Apache Maven 3.doc

    - 使用 `mvn archetype:generate` 命令快速生成一个 Maven 项目骨架。 - **3.3 构建一个简单的项目** - 执行 `mvn clean install` 进行项目的构建。 - **3.4 简单的项目对象模型 (Project Object Model)** - POM ...

    freertos移植,第2.1讲 FreeRTOS在STM32F4上的移植(STM32F407)

    freertos移植,第2.1讲 FreeRTOS在STM32F4上的移植(STM32F407)

    基于STM32的单相3kW/5kW太阳能并网逆变器全C源程序及优化方案

    内容概要:本文详细介绍了用于单相3kW和5kW太阳能并网逆变器的全C源程序设计方案。该方案涵盖了PWM生成、电压电流采样、MPPT算法和并网控制四个核心模块。每个模块都经过精心设计和优化,确保逆变器的高效运行。文中还讨论了关键硬件选型、PCB布局优化以及量产测试规程。此外,针对并网同步采用了软件锁相环和滑动DFT算法,提高了系统的稳定性和响应速度。为了提高电网适应性和系统效率,引入了前馈补偿机制和改进型MPPT算法。 适合人群:从事光伏逆变器开发的技术人员,尤其是对嵌入式系统和电力电子有深入了解的研发工程师。 使用场景及目标:①理解和实现高效的太阳能并网逆变器控制系统;②掌握关键算法如PWM生成、MPPT、并网同步等的具体实现;③优化硬件设计和PCB布局,提高产品性能和可靠性;④制定完善的量产测试方案,确保产品质量。 其他说明:本文提供的方案不仅代码结构清晰,而且附带详细的硬件选型和PCB布局建议,非常适合希望深入理解并网逆变器核心技术的开发者。

    边缘计算基于强化学习的低延迟容器调度算法:物联网服务边缘集群升级中的任务延迟优化设计

    内容概要:本文提出了一种用于边缘集群升级的低延迟容器调度算法,旨在最小化物联网(IoT)任务的总延迟。首先,文章建模了在线容器调度问题,考虑了通信、下载和计算延迟。接着,提出了一种基于策略梯度的强化学习算法(OCS),该算法能够在线做出调度决策,充分利用移动边缘计算(MEC)的独特特性,如地理分布和有限的计算资源。实验结果表明,OCS算法相比基线算法可降低约27%的总延迟。 适合人群:对边缘计算、物联网和强化学习感兴趣的科研人员及工程师,尤其是从事云计算、网络管理和资源调度的研究人员。 使用场景及目标:①适用于需要优化边缘集群升级过程中容器调度的场景;②目标是减少任务执行的总延迟,提高系统效率和响应速度;③通过模拟实验验证算法的有效性,为实际部署提供理论支持。 其他说明:本文详细介绍了OCS算法的设计与实现,包括状态表示、动作空间、奖励机制以及训练过程。实验部分展示了不同节点数量和任务数量下的性能对比,证明了OCS算法的优越性。未来工作将致力于在Kubernetes系统中部署该算法。

    试题:线性代数在几何中的应用.docx

    试题:线性代数在几何中的应用.docx

    3dmax插件Auto锁定XY.ms

    3dmax插件

    试题:组合数学与排列组合.docx

    试题:组合数学与排列组合.docx

    3dmax插件032-自动道路.ms

    3dmax插件

    基于dSPACE平台的永磁同步电机矢量控制技术解析与应用

    内容概要:本文详细介绍了基于dSPACE平台的永磁同步电机(PMSM)矢量控制系统的构建与调试方法。首先阐述了dSPACE平台的优势及其在电机控制领域的应用背景,强调了其提供的强大资源和高效的硬件在环(HIL)测试能力。随后展示了具体的代码实现,包括电机参数定义、PI控制器参数设定、编码器读取、坐标变换(Clarke变换和Park变换)、PI调节器设计、SVPWM生成等关键技术环节。文中还分享了许多实践经验,如参数调整技巧、常见错误避免措施等。最后讨论了系统搭建与实验验证的具体步骤,通过实际案例展示了如何利用dSPACE平台进行有效的电机控制研究。 适合人群:从事电机控制领域研究的技术人员、高校相关专业师生、对永磁同步电机矢量控制感兴趣的工程师。 使用场景及目标:适用于需要深入了解永磁同步电机矢量控制原理并掌握实际操作技能的人群。主要目标是在理论基础上提高动手能力和解决问题的能力,同时熟悉dSPACE这一先进的实时仿真工具。 其他说明:文章不仅提供了详细的理论讲解和技术细节,还包括大量实用的经验分享,有助于读者更好地理解和应用所学知识。此外,文中提到的一些注意事项对于避免常见的开发陷阱非常有帮助。

    MATLAB/Simulink下交直流微电网孤岛系统的MPPT、下垂控制及能量管理仿真研究

    内容概要:本文详细探讨了在MATLAB/Simulink环境下对交直流微电网孤岛系统中风机、光伏、蓄电池的能量管理和控制技术的研究。主要内容包括:1) 风机和光伏的MPPT控制,确保它们能在最佳功率点工作;2) 蓄电池的储能下垂控制,通过调整功率输出维持系统稳定;3) 双向AC/DC变换器的控制,实现能量灵活调度;4) 下垂控制策略的应用,使各发电单元合理分配功率;5) 能量管理系统的构建,协调各单元工作,提高系统效率。文中还提供了具体的MATLAB代码示例,帮助理解和实现这些控制策略。 适合人群:从事微电网研究的技术人员、高校师生及相关领域的研究人员。 使用场景及目标:适用于希望深入了解交直流微电网孤岛系统控制技术的人群,旨在提升对微电网的理解和技术水平,促进可持续能源的发展。 其他说明:文章不仅介绍了理论知识,还给出了详细的代码实现,便于读者动手实践。同时,针对可能出现的问题提出了实用的解决方案,有助于提高仿真的成功率。

    工业控制领域两相步进电机与EtherCAT协议集成的高精度控制方案详解

    内容概要:本文深入探讨了两相步进电机与EtherCAT协议相结合的高精度控制系统。首先介绍了状态机的设计,它不仅涵盖了电源复位、预运行、安全运行等多个阶段,还详细解释了PDO映射机制,确保控制参数能够高效传递。接着讨论了微步控制算法,利用三角函数进行电流矢量分解,提高了控制精度。此外,文章还涉及了对象字典配置、S型加减速算法以及硬件层面如FPGA的应用,展示了如何通过这些技术手段实现亚微米级别的同步精度。最后,强调了系统的模块化设计及其灵活性,使得开发者可以轻松地进行自定义控制算法的开发。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对步进电机控制和EtherCAT协议感兴趣的读者。 使用场景及目标:适用于需要高精度、高可靠性的工业应用场景,如机器人手臂、数控机床等。目标是帮助读者理解并掌握如何将传统的步进电机控制系统与现代的实时以太网协议EtherCAT结合起来,从而提高系统的性能和可靠性。 其他说明:文中提供了大量代码片段作为实例,便于读者更好地理解和实践相关概念。同时,作者分享了许多宝贵的实战经验和调试技巧,有助于解决实际开发过程中可能遇到的问题。

    SmartSoftHelp DeepCore XSuite深度优化版,站在科技最前端的代码生成器:架构,效率,规范,极简,极速,极致!开发辅助终结者-让开发事半功倍!

    还在为数据库管理、代码开发和系统优化的繁杂任务焦头烂额?这款软件就是你翘首以盼的 “开发界瑞士军刀”,全方位赋能,让开发工作事半功倍! 1.数据库深度管理,掌控全局 当数据库遭遇死锁,它能快速定位并提供详尽死锁信息,助你秒解危机;实时监控数据库链接状态、用户情况、端口号等,就像给数据库安装了 “健康监测仪”。从设置最大连接数、把控连接超时,到获取服务器 CPU、磁盘等硬件信息,再到内存、缓存、数据库大小的精细化管理,无论是基础查看,还是清理、收缩、优化等操作,都能轻松完成,让数据库时刻保持最佳性能状态。 2.代码开发神器,效率飙升 无需从零开始编写代码,无论是 netframework 经典三层架构,还是 netcore 的经典代码,甚至是高并发 api 接口代码,都能一键自动生成,大幅缩短开发周期。针对 SQL,它提供耗时优化策略,精准定位低效代码,还能保障事务安全回滚,避免数据错误。json 格式化、数据库连接字符串强优化,每一个细节都为提升开发效率而设计。 3.全栈优化专家,性能拉满 不仅专注后端,对 web 前端也能进行 css、js、html 压缩优化,减小页面加载压力,提升用户体验;在服务器端,深入研究安全防护,优化应用程序与缓存,构建牢不可破的安全防线。同时,它还是版权保护卫士,从图片到代码,为你的创意成果保驾护航,杜绝侵权风险。 4.智能解析,便捷高效 面对二维码、条形码,轻松实现解析,助力开发更多实用功能,满足多样化业务需求。 开发之路道阻且长,但有了这款软件,复杂难题迎刃而解,高效开发触手可及!快来体验,开启你的开发新纪元,让每一行代码都都迸发无限可能!

    浅议教育信息化和信息技术教育的可持续发展.docx

    浅议教育信息化和信息技术教育的可持续发展.docx

    闵文俊-Paimon流式湖仓架构在字节大规模业务场景的实践.pdf

    Con北京站聚焦技术落地与前沿趋势,核心方向包括: ​​AI工程化​​:端侧推理、RAG增强、多模态生成成为主流; ​​云原生深水区​​:混合云治理、湖仓一体架构、可观测性技术持续迭代; ​​安全与效能​​:大模型安全防御、研发流程标准化、平台工程价值凸显; ​​行业融合​​:物流、金融、社交等领域的技术跨界创新案例丰富。 大会为开发者提供了从理论到实践的全景视角,推动技术向生产力转化。

    MATLAB/Simulink中电动助力转向(EPS)系统建模与PID控制算法实现

    内容概要:本文详细介绍了如何利用MATLAB/Simulink构建电动助力转向(EPS)系统模型,涵盖从物理组件建模到控制算法实现的全过程。首先,通过自定义代码实现电机传递函数,确保模型的真实性和灵活性。其次,深入讲解了PID控制算法的手工实现方法及其参数调优技巧,特别是针对方向盘扭矩和路感反馈的特殊处理。此外,文章还探讨了回正控制的设计思路,通过传递函数模拟橡胶衬套的迟滞特性,使方向盘回正时具有轻微震荡,提升驾驶体验。最后,提供了详细的参数配置建议和仿真验证方法,帮助读者更好地理解和优化模型性能。 适合人群:对汽车电子控制系统感兴趣的工程师和技术爱好者,尤其是有一定MATLAB/Simulink基础的用户。 使用场景及目标:适用于希望深入了解EPS系统工作原理的研究人员和开发者,旨在通过动手实践掌握电动助力转向系统的建模与控制算法设计,最终实现高效稳定的转向辅助功能。 其他说明:文中提供的代码片段和参数配置均经过实际测试,能够有效指导初学者完成从理论到实践的学习过程。同时,强调了调试过程中的一些实用技巧,如通过监听电机声音判断过载情况,以及利用图形化界面进行参数调整等。

    SOFC仿真中十字型流道与多种燃料类型的COMSOL建模及优化

    内容概要:本文详细探讨了固体氧化物燃料电池(SOFC)中十字型流道的设计及其在不同燃料(如甲醇、甲烷、氨气)下的仿真优化方法。文中介绍了如何利用COMSOL 5.6进行几何建模、流场设置、反应动力学配置以及热管理和多物理场耦合的具体步骤和技术要点。针对每种燃料,作者分享了仿真过程中常见的‘坑’和解决方案,强调了几何参数、边界条件、反应速率方程等关键因素对仿真结果的影响。 适合人群:从事SOFC仿真研究的技术人员,尤其是熟悉COMSOL软件的科研工作者和工程技术人员。 使用场景及目标:帮助研究人员更好地理解和掌握十字型流道在SOFC仿真的应用,提高仿真精度和效率,减少常见错误的发生。具体应用场景包括但不限于新型SOFC设计、燃料选择评估、反应机理研究等。 其他说明:文章提供了丰富的MATLAB代码片段和实用技巧,有助于读者快速上手并深入理解复杂的多物理场耦合仿真过程。此外,文中引用了多篇学术文献作为理论依据和支持,增强了内容的专业性和可信度。

    3dmax插件013-相机微调器

    3dmax插件013-相机微调器

    3dmax插件CGOMax智能UVW适配.ms

    3dmax插件

    Python 多线程实现视频帧提取、重命名与图片分类整理

    Python 多线程实现视频帧提取、重命名与图片分类整理

Global site tag (gtag.js) - Google Analytics