gpt4 book ai didi

mysql - Rails 和 mysql - 根据表单值动态地向表中添加列

转载 作者:行者123 更新时间:2023-11-29 05:31:01 25 4
gpt4 key购买 nike

我正在开发旧版应用程序 - 现在,我们允许管理员生成带有自定义字段的表单(他们创建字段、选择输入类型、标签等)。

当用户填写此自定义表单时,该表单中的所有字段都会被选中 - 如果该字段不是用户表中的列,我们会将其作为列添加到用户表中。

例如,如果管理员添加了一个名为“航类到达时间”的字段,我们将向用户表添加一个名为“flight_arrival_time”的列,并且用户模型将具有一个名为@user.flight_arrival_time 的属性。

当前的行动方案可能有哪些替代方案?有没有更有效的方法来存储这些值?

以下是一些限制:

我们有数以万计的用户(有人告诉我,将这些属性存储在不同的表中并加入它们会大大降低系统速度。我们经常有大约 20 名左右的管理员查询、导入、更新,并且通常使用我们的系统该死,它在负载下已经很慢了。我没有能力说“购买更多 {X} 以便我们可以更快。”)。我假设连接表(称为类似 user_attributes 的东西)将存储 user_id、属性名称和属性值。如果每个用户都有额外的 15 个属性,而我们有 100,000 个用户,速度会慢多少?

存储必须易于查询(我们使用动态搜索,允许用户从用户模型中选择任何列作为搜索字段并找到输入的值)。您是否可以选择允许简单查询(例如,查找属性名为“航类到达时间”的所有用户是明天)。这也会变得很慢吗?

我将进行一些实验,生成一些建议的模式,为每个用户生成 100,000 个用户和 20 个属性,并运行一些测试查询以检查执行时间,但我想了解从哪里开始的一些信息。

感谢您的输入。

最佳答案

不完全是一个答案,但我认为这种应用程序会从 document-oriented database / NOSQL system 中获益良多。喜欢mongoDB .

这样的系统在设计上是无模式的。

为了补充我的两分钱,让用户对架构进行动态更改似乎是 RDBMS 环境中一个非常危险的选择。您最终可能会得到包含数千个大部分为空 列的表,而 Rails 会实例化对象,其中包含数千种方法。 .. 删除列时会发生什么?

关于mysql - Rails 和 mysql - 根据表单值动态地向表中添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14737061/

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