ASP.Net + SQL Server Проектирование / Предложения по реализации - PullRequest
0 голосов
/ 20 августа 2009

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

Чтобы упростить это на примере, скажем, у каждого пользователя есть банковский счет с процентами. Каждые 5 минут или около того (могут варьироваться) проценты выплачиваются. Когда пользователь заходит на сайт, он видит таймер обратного отсчета до момента, когда процент должен выплачиваться.

Стена, с которой я сталкиваюсь, заключается в том, что просто ощущать себя грязным, когда служба Windows (или что-то еще) постоянно работает с базой данных, ища учетные записи, которые должны «заплатить» и действовать соответственно.

Это, кажется, единственное решение в моей голове на данный момент, но я вполне уверен, что служба, выполняющая запрос для получения отсортированного результирующего набора учетных записей, которые должны быть "оплачены", просто не будет сокращать его.

Заранее спасибо за идеи и предложения!

Ответы [ 3 ]

1 голос
/ 20 августа 2009

Вместо обновления записей просто рассчитайте начисленные проценты на лету.

Этот вид математики довольно прост, вычисления, скорее всего, будут на несколько порядков быстрее, чем постоянное обновление.

Что-то вроде следующего:

WITH depositswithperiods AS (SELECT accountid, depositamount, 
     FLOOR(DATEDIFF(n, deposit_timestamp, GETDATE()) / 5) as accrualperiods, interestrate
     FROM deposits)

SELECT accountid, sum(depositamount) as TotalDeposits, 
     sum( POWER(depositamount * (1 + interestrate), accrualperiods) ) as Balance
FROM
   depositswithperiods
GROUP BY accountid

Я предполагал, что начисленные проценты выше, и никаких выводов.

Для добавления снятия средств потребуется создать группу депозитов для каждого периода времени, взять сумму из них для получения чистого депозита за каждый период времени и затем для расчета процентов по этим группам. 1014 *

0 голосов
/ 06 ноября 2009

Хорошая вещь, о которой стоит подумать, когда вы делаете подобные вещи, это DateTime.

Если за телефонный звонок взимается 10 пенсов в минуту, компьютер не сидит, считая каждую секунду и отрабатывая минуты ... Он просто записывает дату / время в начале и дату / время в конец.

Как предлагают другие, просто рассчитайте его, когда пользователь попытается его просмотреть.

0 голосов
/ 20 августа 2009

Я не знаю, сохранится ли аналогия по интересам для вашего фактического варианта использования. Если база данных не нуждается в постоянном обновлении для всех пользователей в любое время, вы можете применить операцию AddInterest сразу несколько раз, когда вам нужно актуальное значение. То есть всякий раз, когда отображается значение или когда баланс счета собирается измениться.

Вы можете сделать одно ночное обновление для всех учетных записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...