#database #multithreading
#База данных #многопоточность
Вопрос:
Я должен поддерживать ранжирование некоторых записей в моей БД, которые изменяют зависимости от времени последнего взаимодействия.
Post
______________
Id
Content
LastAccessTime
LastRankedTime
Rank
Я подумываю о том, чтобы периодически посещать базу данных и получать все сообщения с LastRankedTime> 15 минут
Затем примените Rank() к каждому элементу, прежде чем записывать их все обратно в БД
Должен ли я беспокоиться о длительном вычислении рейтинга или большой перегрузке чтения / записи на моем сервере / базе данных, если мне нужно выполнить ранжирование для> 10 000 записей?
Каков лучший подход к этой проблеме? Как поможет регулируемый поток с ограниченным количеством записей на посещение базы данных?
Комментарии:
1. в зависимости от того, какую базу данных вы используете, может быть механизм для такого рода вещей. Например, в SQL Server есть
ROWVERSION
функция, которая может сообщить вам, была ли обновлена строка с момента последнего просмотра.2. Но мне все равно нужно извлечь запись, чтобы повторно выполнить ранжирование, поскольку оно также зависит от других показателей. Так что, возможно, это не очень поможет в этом случае.
Ответ №1:
В зависимости от того, какую базу данных вы используете, может быть несколько узлов базы данных, и вы можете думать о кластеризованной базе данных.
Вы записываете свои данные только в один узел. Это не будет иметь индексации в таблицах. Что ускоряет вставку. Вы не читаете с этого узла.
В то же время другой узел предназначен только для чтения с большим количеством индексации для ускорения поиска.
Первый узел будет периодически синхронизировать / реплицировать данные на другие узлы. Вы можете настроить интервал для такой синхронизации. Это стандартный подход, который обычно используется в больших архитектурах с интенсивным трафиком.
Комментарии:
1. Спасибо. В итоге я использую фоновых рабочих с простым ограниченным вводом-выводом. В случае, если база данных станет неожиданно большой, я рассмотрю это решение
Ответ №2:
создайте индексы в столбцах, которые вы используете, это будет работать нормально
Комментарии:
1. Можете ли вы предоставить более подробный ответ, как индексы помогут в этом конкретном случае?