Как лучше сделать?

Ysn

Guest
Как лучше сделать?

Если мне нужно вести историю по каждому пользователю, причем каждому ежедневно будет добавляться одна строка... То есть, через год пять пользователей недурное количество строк втаблице займут. Но пользователей может быть и 50, и 200.

Лучше так? Историю всех в одну таблицу, или же разумнее будет каждому создавать свой файл, и историю каждого - в отдельный файл?
 

rotoZOOM

ACM maniac
База данных на то она и база данных, чтобы работать с большим объемом информации. Не так уж и много это строк (200*365=73000) для современных БД. Вряд ли у тебя получится доставать данные быстрее, чем это сделает БД.
И подумай, а точно тебе необходимо для каждого пользователя каждый день писать какую-то инфу ?
Может можно как то соптимизировать ?
 

Demiurg

Guest
200*365*5 = 365000
не так уж и много. Что ты с этими данными будешь делать потом ?
 

Ysn

Guest
Да собственно, ничего. В момент вставки новой строки, высчитываются кое-какие проценты, и добавляются в отдельные таблицы. А вот эта конкретная таблица - для существования подробной истории.
Каждый день записывать обязательно, так как, во-первых, начислениях происходят ежедневно, во-вторых, пользователь может еще и довложить некоторую сумму, т.е., плюс еще строка.

-~{}~ 29.01.05 14:43:

А, ну разве что - распечатывать эти данные пользователю и админу. Это делать придется точно.
 

rotoZOOM

ACM maniac
Насчет начислений - это же просто вычисляемы поля.
Ты их по формуле считаешь, так ?
Зачем тебе их хранить вообще ?
Вычисляй, когда понадобится.
Храни только транзакции, совершенные пользователем.
 

Ysn

Guest
Историю начислений необходимо выводить каждому пользователю. Если их не записывать, то, получается, вычислять придется при каждом заходе пользователя и админа. В принципе, не столь страшно, но если админ посередине изменит условия начислений, то статистика будет неверной. Ведь так?
 

rotoZOOM

ACM maniac
Выводить историю начислений - это выводить информацию типа: 1 день - такая-то сумма, второй день, такая-то и т.д.
Согласись, что быстрее будет выводить вычисляя все по формулам, а не обращаясь к БД. Это будет не только быстрее, но и памяти не будет жрать. Это раз.
Второе. Что значит админ посередине изменит условия начислений ?
Приведи простенький пример сего действа. И что после этого должен увидеть пользователь ?
 

Ysn

Guest
ээ.... Значит, первого января админ установил, что человек получает 0,5% в день. Человек первого же января вложил 100$, и десятого января он увидит 5 начисленных долларов. Десятого января админ установил 1%, вместо 0,5%. Если все записывать по строчкам, то 20-го января будет 15$ начислено. Если же только высчитывать по формуле, то 20-го будет 20$, т.е. не учтутся первые десять дней, когда процент был 0,5%
 

rotoZOOM

ACM maniac
Храни кроме транзакций клиентов всю информацию по смене процентов. А потом будешь анализировать во время вычислений какой процент в какой период подставлять.
То есть ты должен в Базе хранить только изменившуюся информацию, а все, что можно вычислить не хранить.

Плюсы:
- скорость работы
- незагруженность системы
- маленький объем информации

Минусы:
- надо написать :)))
 

Ysn

Guest
Минус скорее в том, что это надо сосчитать, а не написать. Но общая мысль ясна. Действительно, так покрасимвше. Надо попробовать придумать. Спасибо тебе.
 
Сверху