Хранение массивов в базе данных: JSON против сериализованного массива
Я хочу хранить массив из 3 элементов: последние 3 комментария поста. Я знаю, что мог бы присоединить таблицу "Комментарий" к таблице "Пост", но я бы не стал выполнять этот сложный запрос в целях масштабирования.
Поэтому мне было интересно, как лучше всего хранить эти 3 элемента, поскольку я хотел бы легко обновлять их каждый раз, когда создается новый комментарий: удалите последний комментарий и добавьте новый.
Как правильно это сделать? Сохранить его в сериализованном массиве или в объекте JSON?
1 ответ
Вы можете хранить массивы и хэши, используя ActiveRecord serialize
объявление:
class Comment < ActiveRecord::Base
serialize :stuff
end
comment = Comment.new # stuff: nil
comment.stuff = ['some', 'stuff', 'as array']
comment.save
comment.stuff # => ['some', 'stuff', 'as array']
Вы можете указать имя класса, которому должен соответствовать тип объекта (в этом случае Array
). Это более явно и немного безопаснее. Вам также не придется создавать массив при назначении первого значения, так как вы сможете добавить к существующему (пустому) массиву.
class Comment < ActiveRecord::Base
serialize :stuff, Array
end
comment = Comment.new # stuff: []
comment.stuff << 'some' << 'stuff' << 'as array'
Вы даже можете использовать более аккуратную версию под названием store: http://api.rubyonrails.org/classes/ActiveRecord/Store.html
Это должно обрабатывать ваш вариант использования, используя встроенный метод.