【问题标题】:Document DB for Windows XP 32 bits [closed]适用于 Windows XP 32 位的文档数据库 [关闭]
【发布时间】:2013-03-07 00:45:00
【问题描述】:

我正在寻找支持 Windows XP 32 位的文档数据库,满足以下要求:

  • 不得停止支持。 IE。我希望能够安装最新版本的数据库。 MongoDB 不适合,因为它们不再支持 XP,CouchDB 也不适合,因为它们不再支持任何 Windows 32 位。
  • 应该比较简单。显然,该应用程序不是企业应用程序,因此像 Cassandra 这样的复杂数据库已经不存在了。事实上,我想避免列数据库,因为我认为它们的存在是为了解决企业级问题,而这里不是这样。另一方面,我不想要关系数据库,因为我想避免每次添加新字段时都升级数据库(并且它们将被添加)。
  • 它应该支持对部分文档进行索引,例如 MongoDB。我可以使用关系数据库,如 hsqldb 将数据存储为 json 字符串。这使得添加新字段变得容易 - 无需更改架构。但是这些字段不能被数据库索引。同样,与 MongoDB 不同。
  • 最后,数据库将与应用程序本身在同一台机器上运行 - MongoDB 会再运行一台机器,这会将应用程序的所有 RAM 窃取到它自己。

所以,从某种意义上说,我正在寻找类似 MongoDB 的东西,但要支持 Windows XP 32 位。

有什么建议吗?

附言

我知道 Windows XP 在 MS 停止支持它之前还有一年的寿命。但是,无论如何我都必须支持XP。

【问题讨论】:

  • 数据库必须在 Windows 上吗?还是只是申请? “显然,该应用程序不是企业应用程序,因此像 Cassandra 这样的复杂数据库已经过时了。”那应该是什么意思? MySQL 是一个复杂的数据库...
  • MySQL 可能很复杂,但使用它很简单。顺便说一句,Mysql 可以嵌入运行(libmysqld.dll),这使得使用和部署变得简单。
  • 数据库必须与应用程序在同一台机器上运行 - 我将编辑问题以强调这一事实。

标签: mongodb couchdb hsqldb document-database database


【解决方案1】:

使用 HSQLDB 和其他一些关系数据库,您可以将文档存储为 CLOB。可以通过包含所有索引字段的索引的单个表访问此 clob。例如

CREATE TABLE DATAINDEX(DOCID BIGINT GENERATED BY DEFAULT AS IDENTITY, FIELDNAME VARCHAR(128), FIELD VARCHAR(10000),
    DOCUMENT CLOB, PRIMARY KEY (DOCID, FIELDNAME))

CREATE INDEX IDS ON (FIELDNAME, FIELD);

整个文档就是 CLOB。需要索引进行搜索的选定字段的副本存储在 (fieldnname, field) 列中。具有相同 DOCID 的行在 DOCUMENT 列中将具有相同的 CLOB。用第一个字段和 clob 插入一行,然后通过选择并插入现有的 DOCID 和带有第二个字段的 clob 来复制它。

-- use this to insert the CLOB with the first field
INSERT INTO DATAINDEX VALUES DEFAULT, 'f1', 'fieldvalue 1', ?
-- use this to insert the second, third and other fields
INSERT INTO DATAINDEX VALUES
    IDENTITY(), 'f2', 'filedvalue 2', 
    (SELECT DOCUMENT FROM DATAINDEX WHERE DOCID = IDENTITY() LIMIT 1)

以上只是一个例子。您可以创建自己的 DOCID。原则是使用相同的 DOCID 并插入带有 CLOB 的第一行。第二行和第三行从先前插入的行中选择 DOCID 和 clob,以使用其他字段创建新行。您可能会使用 JDBC 参数来插入 FIELDNAME 和 FIELD 列。

这允许您执行以下搜索:

SELECT DOCID, DOCUMENT FROM DATAINDEX 
    WHERE FIELDNAME = 'COMPANY NAME' AND FIELD LIKE  'Corp%'

这可能无法满足您的所有要求,但答案旨在涵盖 HSQLDB 的可能性。

【讨论】:

  • 我不太明白。如果我有一个 JSON 文档 {f1: x1, f2: x2, f3: {g1: y1, g2: y2}},那么你的意思是我将有 5 个 JSON 文档副本,其中 (fieldname, field) 取值 ('f1', x1)('f2', x2)('f3.g1', y1)('f3.g2', y2)()
  • 我已经更新了答案。例如,您将有 4 行具有相同的 CLOB 引用。一个 clob 可以在多行中重复引用。
  • 如何在几条不同的记录中引用同一个CLOB?
  • 我明白了。就我而言,我使用元数据存储文件(后者的模式很灵活)。因此,单行包含一个用于元数据的 CLOB 和一个用于文件的 BLOB。 INSERT 中的 SELECT 语句可以获取 DOCUMENT 和 FILE 等两个字段吗?数据库引擎是复制 LOB 的内容还是只是对它们的引用?
  • 数据库引擎使用对 LOB 的引用并且不复制内容。您可以编写一个 PROCEDURE 将两个 LOB 选择到两个变量中,然后将变量插入到新行中。
【解决方案2】:

您使用的是哪个编程框架?如果.NET 是可能的,您可以尝试RavenDB。它既可以用作embedded,也可以用作独立数据库。

对于 Java,您可以试用 OrientDB。它也是可嵌入的:https://github.com/nuvolabase/orientdb/wiki/Embedded-Server

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
相关资源
最近更新 更多