Я надеюсь, что Лорион Бурчалл читает это: -)
Мне нужно как можно быстрее вставить миллион крошечных записей.
Сейчас я нахожусь в очень тесном цикле, где для каждой записи я
a) start a transaction (JetBeginTransaction)
b) prepare an update (JetPrepareUpdate)
c) add the row (JetSetColumns)
d) commit the transaction (JetCommitTransaction)
Прямо сейчас, во время этого процесса, я нахожусь в тесном цикле на одном процессоре. Целевая машина имеет несколько процессоров, отличные диски и много свободной оперативной памяти.
Мне интересно, как получить лучшую производительность.
Что касается транзакций, я проводил некоторые эксперименты, и у меня возникали проблемы с возвращением ошибок, если я помещал слишком много данных в одну транзакцию. Я хотел бы лучше понять, что там происходит - есть ли у меня ошибка или размер транзакции ограничен, если ограничен, могу ли я увеличить ограничение? Я только исследую это, потому что предполагаю, что транзакция даст ESE возможность больше кэшировать в ОЗУ, минимизируя объемы сброса диска? - это всего лишь предположение?
Как вообще использовать несколько процессоров / много оперативной памяти / и хорошие диски? открыть базу данных дважды и перейти оттуда? Я не совсем уверен, что происходит в отношении безопасности потоков и транзакций. Если у меня есть два дескриптора для БД, каждый в транзакции, будет ли запись в один дескриптор доступна для второго сразу же, перед фиксацией, или мне нужно будет зафиксировать первый?
Любые советы приветствуются
here are the constraints
a) I've got a million records that need to be written into the DB as fast as possible
b) to fully generate the record for insertion there are two searches that need to occur within the same table (seeking keys)
c) This is a rebuild/regeneration of the DB - it either worked, or it didnt.
If it didnt there is no going back, a fresh rebuild/regeneration is
needed. I cannot restart mid process and without all the data none of
the data is valuable. READ: having one big transaction is fine if it
improves perf. I'd like ESE to cache, in ram, if that helps perf.
спасибо!