eaglet

本博专注于基于微软技术的搜索相关技术
随笔 - 189, 文章 - 0, 评论 - 3725, 阅读 - 147万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

HubbleDotNet 的数据表分为主动模式和被动模式两种,如果是主动模式(IndexOnly=false),HubbleDotNet 会和数据库中对应的表联动,即更新HubbleDotNet时会自动更新数据库中对应的表。但在被动模式(IndexOnly=true)下,数据库中对应的表或视图是只读的,这时如何去更新数据呢?

 

image

图1 被动模式下,更新索引和数据

 

如图1 所示,在被动模式下,更新数据和索引分为两个步骤:

步骤1.

在HubbleDotNet 中执行插入,修改或删除语句,完成全文索引的更新。

步骤2.

在数据库中执行插入,修改和删除语句,完成数据的更新。

 

插入时先步骤2后步骤1

删除时先步骤1后步骤2

修改时情况有点复杂,

如果绑定的是表,两个步骤的顺序无所谓,

如果是视图,先步骤1,后步骤2肯定不会出错(不过如果数据库更新失败,索引回滚是个比较麻烦的事情)

如果先步骤2后步骤1,要看视图有没有什么特殊条件,即必须要保证在修改了数据库对应的表后,通过表对应的主键依然可以从视图中得到记录。


 

注意:

1、如果要执行 Update 和 Delete 操作,被动表必须以 Append, Delete,Update 这种模式创建,如果以Append only 模式创建,则不能更新和删除只能增量。

2、如果是批量插入,避免用循环语句一条一条插入,这样做效率很低,要用批量插入语句,即一次输入多条insert 语句,insert 语句之间以分号分隔。如:

insert table values('Hello world', 0);

insert table values('Good news', 1);

 

通过用户自己的程序来控制被动表索引和数据的更新是推荐的方式,这种方式下用户可以根据自己的实际情况去设计同步的策略,最灵活且效率最高。如果怕麻烦,HubbleDotNet 将在0.9 版本推出一个自动更新被动表索引的功能,这个功能实际上是在数据库中加入了一个触发器,数据库更新时会通过触发器将更新的记录号和字段名记录在一个记录变动表中,HubbleDotNet 定期去读这个表实现数据的自动更新,这种方式由于要用到触发器,效率上肯定要比用户自己进行同步要低。

 

返回 Hubble.net 技术详解

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2008-07-09 修改 HighLight.net 2.0 版本一处Bug
2007-07-09 一款轻量级的桌面应用和Web Server 通讯组件
点击右上角即可分享
微信分享提示