Sqlite – Как эффективно вставлять или обновлять миллионы строк? ⇐ Python
-
Anonymous
Sqlite – Как эффективно вставлять или обновлять миллионы строк?
У меня есть тысячи текстовых файлов, состоящих из товара и кода поставщика, которые имеют следующий формат:
имя_элемента,код_поставщика Например:
Картофель, 10294 Веревка, 49013 Фасоль,23958 Мыло,12495 Я хочу добавить их в одну таблицу в sqlite всего с двумя столбцами: один для названия товара, а другой для списка поставщиков, где каждый уникальный поставщик разделен запятой. Например, это может выглядеть примерно так:
Бобы|23958,23467,35994 Каждый элемент может встречаться в таблице только один раз, а второй столбец может иметь только уникальные коды поставщиков - поэтому, если в текстовом файле есть Beans,23958, который также был в другом текстовом файле, который был ранее обработан, эта строка не будет получена. добавлено в таблицу, поскольку название товара и код поставщика уже существуют.
Поскольку у меня есть эти данные в тысячах текстовых файлов, что в конечном итоге приведет к сотням тысяч строк (если не миллионам), как я могу эффективно добавлять каждый элемент, но при этом гарантировать, что элемент добавляется только один раз и все последующие добавления товара просто добавляется столбец кода поставщика (без добавления повторяющихся кодов поставщика)? Я подумал о запуске двух запросов, первый из которых проверяет, существует ли имя элемента в таблице - если да, то просто обновите код поставщика, добавив новый код, если он тоже не существует. Если имя элемента не существует, просто запустите базовый запрос на вставку с именем элемента и поставщиком.
Похоже, что этот способ не будет эффективен при таком количестве строк, которые мне придется обрабатывать. Я рассмотрел использование транзакций, но не уверен, как это будет работать, поскольку, если транзакция не зафиксирована, мы не будем знать, нужна ли вставка или обновление.
Я был бы признателен за любые идеи, логику или даже предложения по рассмотрению альтернативных методов хранения.
У меня есть тысячи текстовых файлов, состоящих из товара и кода поставщика, которые имеют следующий формат:
имя_элемента,код_поставщика Например:
Картофель, 10294 Веревка, 49013 Фасоль,23958 Мыло,12495 Я хочу добавить их в одну таблицу в sqlite всего с двумя столбцами: один для названия товара, а другой для списка поставщиков, где каждый уникальный поставщик разделен запятой. Например, это может выглядеть примерно так:
Бобы|23958,23467,35994 Каждый элемент может встречаться в таблице только один раз, а второй столбец может иметь только уникальные коды поставщиков - поэтому, если в текстовом файле есть Beans,23958, который также был в другом текстовом файле, который был ранее обработан, эта строка не будет получена. добавлено в таблицу, поскольку название товара и код поставщика уже существуют.
Поскольку у меня есть эти данные в тысячах текстовых файлов, что в конечном итоге приведет к сотням тысяч строк (если не миллионам), как я могу эффективно добавлять каждый элемент, но при этом гарантировать, что элемент добавляется только один раз и все последующие добавления товара просто добавляется столбец кода поставщика (без добавления повторяющихся кодов поставщика)? Я подумал о запуске двух запросов, первый из которых проверяет, существует ли имя элемента в таблице - если да, то просто обновите код поставщика, добавив новый код, если он тоже не существует. Если имя элемента не существует, просто запустите базовый запрос на вставку с именем элемента и поставщиком.
Похоже, что этот способ не будет эффективен при таком количестве строк, которые мне придется обрабатывать. Я рассмотрел использование транзакций, но не уверен, как это будет работать, поскольку, если транзакция не зафиксирована, мы не будем знать, нужна ли вставка или обновление.
Я был бы признателен за любые идеи, логику или даже предложения по рассмотрению альтернативных методов хранения.