这是 NOSQL 的好案例吗?

数据挖掘 nosql 数据库
2021-09-28 02:05:55

我目前正面临一个项目,我可以以相对痛苦的方式使用关系数据库解决该项目。听说过很多关于 NOSQL 的信息,我想知道是否没有更合适的方法来解决它:

假设我们正在跟踪森林中的一组动物(n ~ 500),并希望记录一组观察结果(这是一个虚构的场景)。

我们希望将以下信息存储在数据库中:

  • 每只动物的唯一标识符
  • 具有结构化字段的动物描述:物种,属,家庭,...
  • 带有附加信息的自由文本字段
  • 检测到接近参考点的每个时间点
  • 动物的照片
  • 两个给定动物是否是兄弟姐妹的指示

和:

  • 随着更多数据的进入,稍后可能会出现其他功能

我们希望能够执行以下类型的查询:

  • 返回给定时间间隔内发现的所有动物
  • 返回给定物种或家庭的所有动物
  • 在自由文本字段上执行文本搜索

您会推荐哪个特定的数据库系统?是否有任何教程/示例可以用作起点?

1个回答

三张表:动物观察兄弟观察有一个链接到动物表的animal_id列,兄弟表有animal_1_idanimal_2_id列,表示每行有两只动物是兄弟姐妹。

即使有 5000 只动物和 100000 次观察,对于大多数合理的查询,我认为查询时间不会成为 PostgreSQL 之类的问题(显然你可以构造不合理的查询,但你可以在任何系统中做到这一点)。

所以我不明白这是如何“相对痛苦”的。相对于什么?唯一的复杂性是同级表。在 NOSQL 中,您可能会将兄弟姐妹的完整列表存储在每个动物的记录中,但是当您添加兄弟姐妹关系时,您必须将其添加到兄弟姐妹的动物记录中。使用我概述的关系表方法,它只存在一次,但代价是必须针对两个列进行测试以找到动物的兄弟姐妹。

我会使用 PostgreSQL,如果您有位置数据,它可以让您选择使用 PostGIS - 这是 PostgreSQL 的地理空间扩展,可让您进行空间查询(多边形中的点、点附近的点等),这可能适用于你。

我真的不认为 N​​OSQL 数据库的属性对您来说是个问题——您不会每十分钟更改一次架构,您可能确实关心您的数据库是否符合 ACID,并且您不需要一些 web-规模。

http://www.mongodb-is-web-scale.com/ [警告:强语言]