我正在构建一个存储自定义数据集的 Rails 应用程序。更具体地说,我正在存储排行榜的存档。每个排行榜都有一组可以具有自定义字段的 LeaderboardEntries(换句话说,并非所有排行榜都具有相同的格式)。
快速示例:
Leaderboard 1 (Fields)
-------------
7_day_exponential_moving_average
total_count
Leaderboard 2 (Fields)
-------------
10_day_exponential_moving_average
total_count
现在,我将所有排行榜条目序列化到排行榜中名为“数据”的字段。结果是我对超过 30,000 个对象执行计算,并将结果存储在单个字段中。
我开始看到异步执行计算时存在缺陷(我需要等待所有计算完成,监控它们是否完成,然后存储所有数据),看起来好像创建了一个名为 LeaderboardEntry 的单独模型会更有意义。我想知道的是存储和查询 30,000 个不同对象与将所有 30,000 个条目存储在单个字段中的性能影响,就像我已经在做的那样。
我认为一个请求和一个响应会执行得更好。(IE
SELECT serialized_data FROM leaderboards WHERE leaderboard_id=123 <-- 1 row with a very large field
对比
SELECT * FROM leaderboard_entries WHERE leaderboard_id=123 <-- 30,000 rows with small sets of data
我假设将其存储在序列化字段中是否正确?或者单独存储条目不是什么大不了的事?我在这里有另一个想法:使用像 MongoDB 这样的 nosql 解决方案可能更有效,然后我可以按 leaderboard_entry 字段排序并将结果限制为少量(一次 50 个结果)。
最终,我每天将生成超过 100 万个排行榜条目(用于 20 多个排行榜),我只是想找出最有效的存储方式。
谢谢!