【发布时间】:2012-04-04 01:11:44
【问题描述】:
我最近问了一个关于 Neo4j 的问题,我开始使用它并且看起来不错。它是可嵌入的,并且是用 Java 编写的,并且没有(太多)依赖项。
但它是一个图形数据库,我不知道将其用作简单的键/值存储是否是个好主意。
基本上我有一张大地图,在 Java 中它看起来像这样:
Map<Integer,Map<String,String>>
我在主映射中有几千万个条目,每个条目都包含一个属性/值映射。 “内部”映射相对较小:大约 20 个条目。
我需要一种方法来将该地图从 web 应用程序的运行中持久保存到另一个。
使用 Neo4j,我所做的是为每个 ID(整数)创建一个节点,然后为内部映射中的每个条目放置一个属性。从我早期的测试来看,它似乎有效,但我不确定这是一个好方法。
您会使用哪个用 Java 编写的可嵌入数据库?
要求是:
用 Java 编写
可嵌入(所以没什么大不了的)
不是 SQL (*)
开源
易于备份(我需要能够在服务器运行时进行“实时”备份)
我的术语也可能有点错误,所以请随时帮助/纠正我。对于我的“地图地图”,最合适的应该是键/值对数据库吧?
我有点迷失键/值对数据库、文档数据库、大表、图形数据库等之间的区别。
我也想使用像 Neo4J 这样的图形数据库来满足我的需要是否是个好主意(我认为性能真的不会成为问题,因为我将拥有相对少量的条目)。
当然,我可以简单地保留我自己的地图地图,但我真的不想在这里重新发明任何轮子。我想重用一个久经考验的数据库...
(*) 我不想要 SQL 的原因是我将始终拥有这个“地图的地图”,并且内部地图会不断发展,所以我不想要过于结构化的东西。
【问题讨论】:
-
主图的每个条目中的内图是否极有可能不同,或者主图的内图之间是否存在大量重叠?您可以采取许多不同的路线,但这实际上取决于您的结构中的引用复制量。
-
@cdeszaq:感谢您的评论和帮助...内部地图应该具有相同数量的属性和相同的属性,但是每个属性的值会有所不同。我会说很多重叠,但是我认为性能不会引起那么大的关注:我更喜欢方便/小/易于备份的东西。你认为 Neo4j 会在这里工作吗?我知道有几种选择:太多了,我有点迷路了:)
-
@cdeszaq:我忘了提:内部地图的属性应在应用程序的生命周期内“进化”:将添加新属性(以及没有这些新属性的旧条目, 在查询不存在的属性时应默认为默认值)。所以有重叠,但它不是“结构化的”,因为实际上没有任何固定的模式(如果我的术语正确的话)。
标签: java database web-applications nosql embedded-database