- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个可以与 IBM Informix、MySQL 和 Oracle 中的任何一个一起运行的应用程序,并且我们使用 Java 和 Hibernate 来连接到数据库。我们将在数据库(clob 列)内存储 XML、CSV 和其他基于文本的文件。 Java 中的实体是 byte[]
对象。
现在对应用程序的一项功能请求是“grep”数据内的内容。所以我需要找到所有具有特定内容的文件。
在常规 char/varchar 字段上,我可以使用 like '%xyz%'
,但这不适用于 byte[]/blob。
第一种方法是加载每个实体,将 byte[]
转换为字符串,并使用 Java 中的 contains
方法。如果用户在其他(非 clob)列上输入任何过滤器参数,我将在测试 clob 之前应用这些过滤器,以减少必须扫描的 blob 数量。
只要应用程序和数据库位于同一服务器上,这对于 100 个文件(clob)来说效果很好。但我认为如果数据库中有 1.000.000 个文件并且数据库并不总是位于同一个网络中,速度会变得非常慢。所以我认为这不是一个好主意。
我的下一个想法是创建一个数据库过程。但我不太确定这对于 Informix、MySQL 和 Oracle 是否可行。我不确定这是否可能。
最后但不受欢迎的方法是将数据内容存储在不存储在 clob 内的方法。也许我可以使用不同的数据类型?
有人知道如何实现这一点吗?我需要一个适用于所有三个 DBMS 的解决方案。应用程序知道它连接到哪种 DBMS。因此,如果我有三种不同的解决方案(每个 DBMS 一个),那就没问题了。
我完全愿意改变我使用的数据类型(BLOB、CLOB ...)——我可以根据需要进行修改。
注意:clob 的范围从大约 5 KiB 到大约 500 KiB,最大为 1 MiB。
最佳答案
查看 Apache Lucene 或其他文本索引库。 https://en.wikipedia.org/wiki/Lucene http://en.wikipedia.org/wiki/Full_text_search
如果您使用 Oracle Text Search 等特定于数据库的解决方案,则必须为每个数据库实现自定义解决方案。根据我的经验,我知道 Oracle Text 搜索需要大量时间来学习,并且需要进行大量调整才能恰到好处。
此外,如果您使用数据库解决方案,即使数据集相同,您也会在每个数据库中收到不同的结果(每个数据库都有自己的索引和检索数据的方法)。
通过使用 Lucene 等第 3 方解决方案 - 您只需学习一种解决方案,无论数据库如何,结果都将保持一致。
关于java - Informix、MySQL 和 Oracle blob 包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951866/
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我必须做一个大的更新脚本 - 而不是 SPL(存储过程)。它是为 Informix 数据库编写的。 它涉及将行插入到多个表中,每个表都依赖于前一个表的插入顺序。 我知道我可以通过这样做来访问该序列:
我在 Informix DB 的表中有大约 300 万行。 在加载新数据之前,我们必须删除它。 它在其中一列上有一个主键。 为了删除相同的内容,我想到了使用 rowid 。但是当我尝试 select
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我想在 informix 数据库表中选择列时使用列别名。例如在以下查询中: SELECT hire_dt as "Hire Date" FROM employee 列 Hire_dt 应显示为雇用日期
我必须将我的应用程序连接到客户的 Informix 7.2 旧数据库。 据我所知,理论上应该有一个数据库服务在端口50000上运行。问题是我在操作系统中找不到任何数据库服务。 到目前为止,我只能使用
在 Informix 存储过程中,我有一些情况是这样的:- If val1 > 0 // 1st If Select count(*) of v
我正在将一些 informix SQL 转换为 SQL Server。 下面的查询中的方括号是什么意思? SELECT unique cl_name[1,5] FROM client cl_name
我有一台服务器,并且我知道上面安装了 Informix,但我不知道是谁安装的。有一个闭源客户端连接到该服务器,但除了用户名和密码之外我无法获取任何有关它的信息。我不知道如何连接它,我不知道它的端口号和
在 Informix 存储过程中,我有一些情况是这样的:- If val1 > 0 // 1st If Select count(*) of v
我正在将一些 informix SQL 转换为 SQL Server。 下面的查询中的方括号是什么意思? SELECT unique cl_name[1,5] FROM client cl_name
我是 Informix-SQL 新手。我正在尝试在 Informix 中创建表单。我提到了some resources online 这就是我现在访问数据库的方式dbaccess database_n
是否有引用文档列出 4GL 实际使用的所有功能代码(理想情况下,所有出现在随 4GL RDS 提供的 termcap 中的代码)? 例如: gs - start graphics mode (box-
在 Informix SPL 例程中执行与传统 sleep() 系统调用语义等效的最佳方法是什么?换句话说,只需“暂停” N 秒(或毫秒或其他什么,但几秒就可以了)。我正在寻找一种解决方案,它不涉及将
在 Informix 中将 varchar 类型转换为 Int 类型时遇到问题。 实际上我不知道该值是否真的是 varchar 或不是我想转换为 INT 的值。这是一个沙盒系统。 例如: 我正在尝试运
我想知道是否可以像在 MS SQL 中一样在 Informix 中选择每个第 n 行?! 就像是 SELECT * FROM order by ASC limit 1 OFFSET 4 只是没有用
我在我维护的一些代码中发现他们使用这种格式进行更新查询 UPDATE X=to_date('$var','%iY-%m-%d %H:%M:%S.%F3') ... 但我无法在 Informix 文档中
我已经为 Informix 数据库(版本 IBM Informix Dynamic Server 版本 14.10.FC10AEE)创建了一条插入语句。 这看起来如下: INSERT INTO per
我们的 Solaris 服务器上运行着 Informix,在 /usr/informix/bin 下有几个可执行文件,例如 'dbaccess' 和 'isql' . 例如,当输入“isql -V”时
假设我有以下查询: insert into myTable values ("TEST 1 TEST 2") 然后我选择要输出到 Excel 工作表的描述: select description fr
我是一名优秀的程序员,十分优秀!