gpt4 book ai didi

ruby-on-rails - 如果我的模型不代表不同的想法,而是代表具有重叠字段的不同类型,我应该在应用程序中使用什么数据库?

转载 作者:可可西里 更新时间:2023-11-01 09:53:04 26 4
gpt4 key购买 nike

我正在构建一个应用程序,我将从游戏中收集统计数据。本质上,我将解析日志,其中每一行都是一个游戏事件。大约有 50 种不同的事件,但其中很多是相关的。每个事件都有一组与之关联的特定值,相关事件共享许多这些属性。总共有大约 50 个属性,但任何给定的事件只有大约 5-10 个属性。

我想使用 Rails 作为后端。大多数查询将与事件类型相关,这意味着我并不特别关心两种事件类型在任何给定轮次中如何相互关联,就像我关心来自多个轮次的单一事件类型的数据一样。我应该构建什么样的模式以及我应该使用什么样的数据库?

给定一个关系数据库,我想到了以下几点:

  1. 采用扁平结构,其中只有几个表,但事件表的列数与总体事件属性数一样多。这将导致每一行中出现大量空值,但它可以让我轻松访问我需要的内容。

  2. 为每种事件类型等创建一个表格。这会让我节省空间并提高性能,但考虑到事件并不是真正独立的“想法”,拥有那么多表格似乎有些过分。

  3. 将相关事件组合在一起,最大限度地减少表格数量和每个表格的属性数量。那么问题就变成了分组。这远非一刀切,正确建立事件父类(super class)型可能需要很长时间。此外,它并没有完全解决存在大量 nils 的问题。

还建议我考虑使用 NoSQL 数据库,例如 MongoDB。在这种情况下似乎非常适用,但我以前从未使用过非关系数据库。看起来我仍然需要很多不同的模型,即使我不会为每个模型准备表格。

有什么想法吗?

最佳答案

这感觉像是 MongoDB 的一个很好的用例,但对于关系数据库来说却非常尴尬。

您将针对此数据进行的查询类型是最佳模式设计的关键,但想象一下您的文档(在类似于上述 1. 的单个集合中)看起来像这样:

{  "round" : 1,
"eventType": "et1",
"attributeName": "attributeValue",
...
}

您可以轻松地按回合、按事件类型查询,返回所有属性或仅指定子集等。

您不必事先知道您可能拥有多少属性、哪些属性属于哪些事件类型,甚至您有多少种事件类型。在构建原型(prototype)/应用程序时,您将能够根据需要改进模型。

有一个由 Rails/MongoDB 人员组成的非常活跃的社区,您很有可能会找到很多可以提问的开发人员和很多可以作为示例查看的代码。

我鼓励您尝试一下,看看感觉是否合适。我打算添加一些链接来帮助您入门,但它们太多了,无法选择!由于您可能对是否使用对象映射器有疑问,所以这里有一个 good answer to that .

一篇关于使用 Ruby 和 MongoDB 处理动态属性的好文章是 here .

关于ruby-on-rails - 如果我的模型不代表不同的想法,而是代表具有重叠字段的不同类型,我应该在应用程序中使用什么数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10859377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com