Проблема производительности на Java DB Derby Blobs & Delete

Если вы находитесь на окнах, вам все равно не понадобится колесо! Вы можете напрямую установить пакет, загрузив 32-битный пакет как win32 по этой ссылке [ http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy] , а затем переместить этот загруженный пакет. в текущую директорию cmd, откройте cmd и напишите следующий код pip install numpy-1.13.1+mkl-cp36-cp36m-win32.whl, затем сделайте то же самое для scipy

Для 64-битной системы вам нужно установить mingw-w64, так как это gcc и компилирует numpy и scipy в качестве предварительно скомпилированного состояния.

В настоящее время он работает нормально с 32-битной версией. Итак, я выбрал пакет win32 для numpy + mkl и scipy в этой ссылке.

Надеюсь, что это работает! Дай попробовать

5
задан John Topley 25 May 2009 в 18:01
поделиться

4 ответа

У меня точно такая же проблема, как и у вас.

Я обнаружил, что когда я делаю УДАЛЕНИЕ, Дерби фактически полностью "читает" файл большого сегмента. Я использую Filemon.exe, чтобы наблюдать, как он работает.

Размер моего файла - 940 МБ, и на удаление одной строки уходит 90 секунд.

Я считаю, что дерби хранит данные таблицы в одном файле внутри. И кое-как ошибка дизайна / реализации, которая заставляет читать все, а не делать это с правильным индексом.

Я делаю пакетное удаление, а не для решения этой проблемы. Переписываю часть своей программы. Это было «где id =?» в автоматической фиксации. Затем я много чего переписываю, и теперь это «где ID IN (?, .......?)» Заключено в транзакцию.

Общее время уменьшилось до 1/1000, чем было раньше.

Я предлагаю что вы можете добавить столбец для «пометить как удаленное» с расписанием, которое выполняет пакетное фактическое удаление.

3
ответ дан 14 December 2019 в 08:59
поделиться

Вы пробовали увеличить размер страницы своей базы данных ?

Информацию об этом и многом другом можно найти в руководстве Настройка Java DB , которое вы может оказаться полезным.

0
ответ дан 14 December 2019 в 08:59
поделиться

Насколько я могу судить, Derby будет хранить только большие двоичные объекты, встроенные в другие данные базы данных, , поэтому вы получите большой двоичный объект, разделенный на тонну отдельных БД. файлы страниц. Этот механизм хранения больших двоичных объектов хорош для ACID и хорош для небольших двоичных объектов (скажем, эскизов изображений), но не работает с более крупными объектами. Согласно документации Derby, отключение автоматической фиксации при манипулировании большими двоичными объектами также может улучшить производительность , но это только пока.

Я настоятельно рекомендую вам перейти на H2 или другую СУБД, если важна хорошая производительность на больших BLOB , а BLOB-объекты должны оставаться в пределах БД. Вы можете использовать клиент SQuirrel SQL и его подключаемый модуль DBCopy для прямой миграции между СУБД (вам просто нужно указать его на драйвер JDBC Derby / JavaDB и драйвер H2). Я' Буду рад помочь с этой частью, так как я сделал это сам и не был счастливее.

В противном случае, вы можете переместить большие двоичные объекты из базы данных в файловую систему. Для этого вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

так как я сделал это сам и не был счастливее.

В противном случае вы можете переместить большие двоичные объекты из базы данных в файловую систему. Для этого вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

так как я сделал это сам и не был счастливее.

В противном случае вы можете переместить большие двоичные объекты из базы данных в файловую систему. Для этого вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

В противном случае вы можете переместить большие двоичные объекты из базы данных в файловую систему. Для этого вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

В противном случае вы можете переместить большие двоичные объекты из базы данных в файловую систему. Для этого вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

вы можете переместить большие двоичные объекты из базы данных в файловую систему. Для этого вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

вы можете переместить большие двоичные объекты из базы данных в файловую систему. Для этого вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

вы должны заменить столбец BLOB в базе данных на размер BLOB (при желании) и местоположение (URI или зависящую от платформы строку файла). При создании нового большого двоичного объекта вы создаете соответствующий файл в файловой системе. Местоположение может быть основано на данном каталоге с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

с добавленным первичным ключом. Например, ваша БД находится в «DBFolder / DBName», а ваши большие двоичные объекты входят в «DBFolder / DBName / Blob» и имеют имя файла «BLOB_PRIMARYKEY.bin» или что-то подобное. Чтобы отредактировать или прочитать BLOB-объекты, вы запрашиваете местоположение в БД, а затем выполняете чтение / запись непосредственно в файл. Затем вы регистрируете новый размер файла в БД, если он изменился.

3
ответ дан 14 December 2019 в 08:59
поделиться

Я уверен, что это не тот ответ, который вам нужен, но для производственной среды с требованиями к пропускной способности я бы не стал использовать Java DB. MySQL так же бесплатен и намного лучше справится с вашими требованиями. Я думаю, что вы действительно просто бьетесь головой об ограничении выбранного вами решения.

Я обычно использую Derby только в качестве тестового примера, и особенно только тогда, когда вся моя БД может легко поместиться в памяти. YMMV.

1
ответ дан 14 December 2019 в 08:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: