Informix,MySQL和Oracle blob包含

时间:2016-06-21 18:23:17

标签: java mysql oracle hibernate informix

我们有一个可以与任何IBM Informix,MySQL和Oracle一起运行的应用程序,我们使用Java和Hibernate连接到数据库。我们将XML,CSV和其他基于文本的文件存储在数据库(clob列)中。 Java中的实体是byte[]个对象。

现在,对应用程序的一个功能请求是" grep"数据内容。所以我需要查找具有特定内容的所有文件。

在常规char / varchar字段上,我可以使用like '%xyz%',但这不适用于byte [] / blobs。

第一种方法是加载每个实体,将byte[]转换为字符串并使用Java中的contains方法。如果使用在其他(非clob)列上输入任何过滤器参数,我将在测试clob之前应用这些过滤器,以减少我必须扫描的blob数量。

只要应用程序和数据库位于同一台服务器上,就可以很好地处理100个文件(clobs)。但我认为如果我在数据库中有1.000.000个文件并且数据库并不总是在同一个网络中,它会变得非常慢。所以我认为这不是一个好主意。

我的下一个想法是创建一个数据库程序。但我不太确定Informix,MySQL和Oracle是否可行。我不确定这是否可能。

最后但不受欢迎的方法是将数据的内容存储在clob中。也许我可以使用不同的数据类型?

有谁知道如何实现这一目标?我需要一个针对所有三个DBMS的解​​决方案。应用程序知道它连接到哪种DBMS。如果我有三种不同的解决方案(每个DBMS一个),那就没关系。

我完全愿意改变我使用的数据类型(BLOB,CLOB ...) - 我可以根据需要修改它。

注意:clob的范围从大约5 KiB到大约500 KiB,最大为1 MiB。

1 个答案:

答案 0 :(得分:0)

查看Apache Lucene或其他文本索引库。 https://en.wikipedia.org/wiki/Lucene http://en.wikipedia.org/wiki/Full_text_search

如果您使用Oracle Text Search等特定于数据库的解决方案,则必须为每个数据库实施自定义解决方案。我从经验中知道,Oracle Text搜索需要花费大量时间来学习,并且需要进行大量调整才能做到正确。

此外,如果使用数据库解决方案,即使数据集相同,每个数据库也会收到不同的结果(每个数据库都有自己的索引和检索数据的方法)。

通过使用像Lucene这样的第三方解决方案 - 你只需要学习一个解决方案,无论Db如何,结果都是一致的。