Как лучше реализовать постоянный отсчёт времени и суммирование значений?
Надо ли иметь в БД статичное значение баллов? Может, оставить свойство вычисляемым — когда требуется узнать про конкретного пользователя, сколько у него баллов — выполняется поиск купленных им карточек за последние 10 дней и до сих пор активных, и суммируются.

Либо можно обновлять базу cron-задачей. Округлить до какого-то интервала времени: 1 сутки (если все в одном городе), или 1 час, если пользователи со всех частей света. Карта начинает действовать в ближайший следующий «момент» после активации. В ближайшую полночь, скажем.

1000 пользователей по 5 карточек — это не нагрузка, всё легко отработает.
> "Если в реляционной базе данных, то начисление 1000 пользователей с 4-5 карточками у каждого делается одним SQL-запросом"
> да, так и планировал сделать.

Не советую так делать, если не хотите зафакапить данные.
Даже обход в цикле 5000 тысяч строк не займет больше 5 минут. Зависит от сетапа, конечно.

Делайте поочередную выгрузку, последующее обновление с логированием куда-нибудь в файл, бд, stdout.
В случае, когда что-то пойдет не так, можете заглянуть в логи и увидеть, что 1 и 5000 строчек не обновилась, вместо того, чтобы все 5000 строк не были затронуты.
Если много памяти потреблять будет, то можно воспользоваться батч-запросами или курсором.
Скрипт на 5 минут в день не повлияет на вашу производительность приложения. Делать 1 запросом может и быстрее, но только если вы уже всё отстроили и точно уверены в том, что этот запрос никогда сбоить не будет. Даже после изменения схемы БД другим программистом, который забудет поправить ваш скрипт ;)