我正在开发一个遗留应用程序——现在,我们允许管理员生成带有自定义字段的表单(他们创建字段、选择输入类型、标签等)。
当用户填写此自定义表单时,会检查该表单中的所有字段 - 如果该字段不是 users 表中的列,我们将其作为列添加到 users 表中。
例如,如果管理员添加了一个名为“航班到达时间”的字段,我们将在 users 表中添加一个名为“flight_arrival_time”的列,并且 User 模型将有一个名为 @user.flight_arrival_time 的属性。
目前的行动方案可能有哪些替代方案?有没有更有效的方法来存储这些值?
以下是一些限制:
我们有成千上万的用户(有人告诉我,将这些属性存储在不同的表中并加入它们会大大降低系统速度。我们通常有大约 20 名左右的管理员查询、导入、更新,并且通常使用地狱我们的系统在负载下已经很慢了。我没有能力说“购买更多 {X} 以便我们可以更快。)。我假设一个连接表(称为 user_attributes 之类的东西)将存储 user_id,属性名,属性值,如果每个用户多出15个属性,我们有10万用户,会慢多少?
存储必须易于查询(我们使用动态搜索,允许用户从 User 模型中选择任何列作为搜索字段并找到输入的值)。您是否选择允许简单查询(例如,查找属性名为“Flight Arrival Time”为明天的所有用户)。这也会变得很慢吗?
我将进行一些实验,生成一些建议的模式,为每个用户生成 100,000 个用户和 20 个属性,并运行一些测试查询来检查执行时间,但我想输入一些关于从哪里开始的信息。
感谢您的输入。