Постоянное обновление базы данных без перегрузки сервера

#database #multithreading

#База данных #многопоточность

Вопрос:

Я должен поддерживать ранжирование некоторых записей в моей БД, которые изменяют зависимости от времени последнего взаимодействия.

 Post
______________
Id    
Content
LastAccessTime
LastRankedTime
Rank
  

Я подумываю о том, чтобы периодически посещать базу данных и получать все сообщения с LastRankedTime> 15 минут

Затем примените Rank() к каждому элементу, прежде чем записывать их все обратно в БД

Должен ли я беспокоиться о длительном вычислении рейтинга или большой перегрузке чтения / записи на моем сервере / базе данных, если мне нужно выполнить ранжирование для> 10 000 записей?

Каков лучший подход к этой проблеме? Как поможет регулируемый поток с ограниченным количеством записей на посещение базы данных?

Комментарии:

1. в зависимости от того, какую базу данных вы используете, может быть механизм для такого рода вещей. Например, в SQL Server есть ROWVERSION функция, которая может сообщить вам, была ли обновлена строка с момента последнего просмотра.

2. Но мне все равно нужно извлечь запись, чтобы повторно выполнить ранжирование, поскольку оно также зависит от других показателей. Так что, возможно, это не очень поможет в этом случае.

Ответ №1:

В зависимости от того, какую базу данных вы используете, может быть несколько узлов базы данных, и вы можете думать о кластеризованной базе данных.

Вы записываете свои данные только в один узел. Это не будет иметь индексации в таблицах. Что ускоряет вставку. Вы не читаете с этого узла.

В то же время другой узел предназначен только для чтения с большим количеством индексации для ускорения поиска.

Первый узел будет периодически синхронизировать / реплицировать данные на другие узлы. Вы можете настроить интервал для такой синхронизации. Это стандартный подход, который обычно используется в больших архитектурах с интенсивным трафиком.

Комментарии:

1. Спасибо. В итоге я использую фоновых рабочих с простым ограниченным вводом-выводом. В случае, если база данных станет неожиданно большой, я рассмотрю это решение

Ответ №2:

создайте индексы в столбцах, которые вы используете, это будет работать нормально

Комментарии:

1. Можете ли вы предоставить более подробный ответ, как индексы помогут в этом конкретном случае?