|
|
|
Ведение лога величины
|
|||
|---|---|---|---|
|
#18+
Нужно сохранять значение некой величины (float) в момент времени (datetime) 1 запись каждые две минуты, т.е. 720 в день, 262800 записей в год. Таких величин 15. Выборки нужно будет производить по интервалу времени для какой-либо величины . Добавление значений производит один клиент, запросы на выборку могут посылать несколько клиентов (локально или по сети), запросы на добавление и выборку могут приходить одновременно. Мой вариант: использовать 15 отдельных таблиц, в которых всё и хранить. Вопросы : нужно ли поле id, можно ли в качестве первичного ключа использовать поле с датой временем, по какому полю индексировать и нужно ли это делать? Какую технологию использовать InnoDB или MyISAM? Простите за каламбур, мало смыслю в БД, но задача встала - надо разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2009, 13:46 |
|
||
|
Ведение лога величины
|
|||
|---|---|---|---|
|
#18+
Ketzer Вопросы : нужно ли поле id, можно ли в качестве первичного ключа использовать поле с датой временем, по какому полю индексировать и нужно ли это делать? Какую технологию использовать InnoDB или MyISAM?Сильно не рекемоендуется делать время PK, потому что если по какой-то причине у вас появится 2 записи одной секундой - то вы их вобще не сможете вставить. По поводу индексирования, типа БД (я так понимаю это MySQL) - создайте тестовую БД с данными за 2-3 года и погоняйте запросы. Ваши размеры - не бог весть что, поэтому проблемы могут возникнуть либо из-за MySQL, либо из-за железа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2009, 14:52 |
|
||
|
Ведение лога величины
|
|||
|---|---|---|---|
|
#18+
Да, вы правильно понимаете, это MySQL :) Создал две таблицы Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. Загнал по миллиону записей в каждую. В таблицу на InnoDB это заняло около восьми часов (загонял каждую запись отдельно без открытия/закрытия транзакций), на MyISAM меньше 30 минут. Погоняв SELECT, вижу что MyISAM в разы, а местами порядки быстрее. Далее провёл такой тест: пускаю двух отдельных клиентов которые с периодичностью 2 сек каждый добавляет новую запись, в это время третий клиент начинает выполнять запрос: Код: plaintext Результат: запрос на выборку выполняется около 15 секунд, но при этом два добавляющих клиента работают нормально - все записи добавились. Но почему они нормально добавились одновременно с запросом SELECT?? Получается насколько MyISAM быстрее настолько InnoDB надёжнее? И в чём тогда эта надёжность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2009, 13:05 |
|
||
|
Ведение лога величины
|
|||
|---|---|---|---|
|
#18+
KetzerРезультат: запрос на выборку выполняется около 15 секунд, но при этом два добавляющих клиента работают нормально - все записи добавились. Но почему они нормально добавились одновременно с запросом SELECT?? Получается насколько MyISAM быстрее настолько InnoDB надёжнее? И в чём тогда эта надёжность?А в чем здесь проблема? SELECT не блокирует таблицу, а значит ничего не мешает добавлять. К тому же, весь вопрос упирается есть ли "грязное чтение" в MySQL или нет. В Oracle - его нет и SELECT не увидит записи, которые начали вставляться после запуска SELECT-а. Но это не мешает их вставить. Я давно не работал с MySQL (почти 8 лет), поэтому нынешних его фичь не знаю. Про грязное чтение - даже если оно есть, то так ли оно страшно вам? Про надежность InnoDB - основа ее надежности - журналирование, насколько помню. Скажется это в случае, например, скоропостижной пропажи питания или других сбоев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2009, 13:37 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1543410]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
191ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 515ms |

| 0 / 0 |
