git reset --soft HEAD^
сворачивает ваш коммит, и когда вы набираете git status
, он говорит вам, что делать:
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
Я бы так не поступил. Я бы сохранил запись для каждого (пользователя, уведомления) и пометил бы каждую запись как прочитанную или непрочитанную. Затем вы можете записывать, когда они его читают, что может быть важно в зависимости от вашего приложения (например, если вам нужен какой-то контрольный журнал).
100k записей - это не очень много. Не беспокойтесь о размере, пока вы не достигнете хотя бы 10 миллионов записей. При необходимости заархивируйте их в какой-то момент. Но вы должны сделать некоторые оценки того, как быстро вы создадите 10 миллионов записей. Если это 3 дня, то да, у вас проблема. Если это 3 года, то вы этого не сделаете.
У этой опции, конечно, есть текст уведомления в отдельной таблице.
Это также должно очень хорошо масштабироваться с еще большим количеством сообщений, поскольку вы выбираете непрочитанные сообщения для пользователя (индексируются) и можете присоединиться, чтобы получить текст уведомления (если размер вашей таблицы составляет десятки миллионов записей) или выберите их, а затем отдельно выберите сообщения.
Разделить таблицу (пользователь, уведомление) легко: вы основываете ее на диапазонах пользователей.
И когда пользователи удаляют сообщения, обычно вы должны просто пометить их как удаленные, а не фактически удалив его. В большинстве случаев нет особых причин удалять что-либо в базе данных.
как правило, вы должны просто пометить его как удаленный, а не удалять его. В большинстве случаев нет особых причин удалять что-либо в базе данных. как правило, вы должны просто пометить его как удаленный, а не удалять его. В большинстве случаев нет особых причин удалять что-либо в базе данных.В качестве альтернативы вы можете сохранить набор ссылок на заметки, которые еще предстоит прочитать, для каждого профиля пользователя, а затем удалять их, когда они отображаются (общий вариант использования наверное читает сразу все заметки). Таким образом, у вас будет только крошечный запрос, когда вы извлечете отдельного пользователя, и ваши затраты будут на время вставки глобального сообщения, а не на фильтрацию большой таблицы непрочитанных сообщений.