none
SQL, правильное использование SubmitChanges RRS feed

  • Вопрос

  • Помещаю в БД таблицу, которая уже имеет много записей (допустим, 300 000 тыс) и в дальнейшем происходит ее обновление,  в виде добавления записей. При экспорте, сначала вся история приходит порциями по 16 000 записей, а затем каждая новая запись приходит в виде одной строки.

    Само добавление идет так:

                    foreach (var update in e.Update)
                    {
                        _dc.Table.InsertOnSubmit(new Table
                        {
                            Поле1 = update.a,
                            Поле2 = update.b,
                            Поле3 = update.c,
                        });
                    }
    Затем используется _dc.SubmitChanges.

    Опытным путем выяснил, то подавляющую часть занимает выполнение SubmitChanges. В связи с этим вопрос, как правильно его использовать в ситуации, подобной моей? После каждого добавления делать SubmitChanges слишком затратно. Делеать SubmitChanges по таймеру, или может делать при накоплении какого-то количества записей? Момент, когда закончит приходить большими пакетами история, и начнут приходить обновления по одной записи - неясен.

    Обновления в виде одной новой записи приходят очень часто, примерно 50-100 раз в секунду.




    • Изменено Qwester33 26 ноября 2012 г. 8:04
    25 ноября 2012 г. 13:52

Ответы

  • Добрый день.

    Если вам не хватает скорости записи, но возможет люфт в несколько секунд мжеду получением и занесением их в БД, я бы посмотрел в сторону Bulk Insert-ов. Они выполняются очень быстро. Ну а если они вам не подходят, то я бы отказался от датаадаптеров и таблиц, и записывал бы данные инсертами, через SqlCommand, т.к. SaveChanges еще тратит время на просмотр всех записей в вашей таблице, не поменялись ли они...

    • Помечено в качестве ответа Qwester33 28 ноября 2012 г. 9:26
    26 ноября 2012 г. 10:39
    Отвечающий