Каков наиболее эффективный способ хранения больших массивов (10000x100) в базе данных, скажем, hsqldb? Мне нужно сделать это для определенной математической программы, которую я пишу в java. Пожалуйста помоги. Весь массив будет извлекаться и храниться часто (не так много отдельных элементов). Кроме того, некоторые метаданные о массиве должны храниться в массиве.Хранение массивов в базах данных
ответ
Большой вопрос.
Если вы не хотите переводить свои массивы в набор нормализованных таблиц, что звучит так, как будто вы этого не делаете, вам может потребоваться сериализация.
Сериализация - это причудливое слово для превращения объектов в какой-либо формат, который можно сохранить на диск или базу данных. Два основных формата для сериализации - двоичные и XML, и я уверен, что Java имеет определенную поддержку для этого.
В зависимости от того, какие типы данных вы используете, вы должны иметь возможность превратить свой массив в XML или двоичный код, а затем сохранить его в одном поле в базе данных. Вы можете начать эту технику на Java, проверив http://java.sun.com/developer/technicalArticles/Programming/serialization/. Я знаю, что он встроен в .NET.
Надеюсь, что это поможет. Дай мне знать, смогу ли я дать вам больше указания.
Определите таблицу с данными, хранящимися в вашем массиве, и вставьте значения массива в таблицу.
Это очень простой доступ к данным/хранилище. Будут ли размеры вашего массива одинаковыми?
Нет, размеры не останутся прежними. – 2008-10-17 20:37:50
Если размеры не совпадают, вам придется использовать что-то вроде сериализации, как указано ниже. – Nick 2008-10-17 20:43:07
- Сделайте это в одной крупной сделке. Не заставляйте систему базы данных создавать новую неявную транзакцию для каждой вставки.
- Используйте подготовленное заявление.
Как насчет хранения данных в виде BLOB и использования Java для декодирования BLOB в реальном массиве Java? Было бы намного эффективнее хранить и извлекать весь массив одним глотком, но было бы ужасно для скрещивания отдельных элементов.
PostgreSQL имеет встроенную поддержку массивов.
Придумайте внутреннее представление - будь это XML, JSON, некоторый двоичный файл, который вы придумали сами, или любую другую форму сериализации.
Сохраните его в таблице, используя тип данных «blob». Храните любые метаданные, связанные с матрицей, в дополнительных столбцах.
Я категорически не согласен с тем, что способ сделать это состоит в том, чтобы создать таблицу с таким же количеством строк и столбцов, что и ваша матрица, - это очень высокая цена за неиспользованные функции.
Предварительно подготовьте свои инструкции вставки/select и используйте переменные связывания, чтобы изменить, с какой матрицей вы работаете, - не делайте db перепрофилировать каждый запрос.
Если это всего лишь 1 массив, почему бы не использовать двоичный файл?
Как уже было сказано: не используйте СУРБД, если вам не нужны функции.Вместо Serialization, хотя вы можете захотеть проанализировать API низкого уровня, например JDBM, который предоставляет некоторые базы данных, такие как функции индексирования на диске.
Если ваши данные плотно упакованы (гистограмма значений близка к плоской линии), ваш лучший выбор - это blob и сериализация с использованием потока Object [Output/Input].
В противном случае может оказаться более эффективным использование разреженных массивов и изменение схемы Entity-Attribute-Value. Вот пример:
Name | IndexKey | Value
------+-----------+-------
foo | 'default' | 39
foo | 0:0:0 | 23
foo | 0:0:1 | 34
foo | 1:5:0 | 12
...
bar | 1:3:8 | 20
bar | 1:3:8 | 23
bar | 1:1:1 | 24
bar | 3:0:6 | 54
...
Это также позволяет вам быстро обновление части таблицы и выбирающие срезам с помощью SQL «как» оператора.
Если число ваших измерений фиксировано для разбивки столбца ключа для разделения столбцов int для каждого измерения, чтобы повысить эффективность индекса и иметь более гибкие критерии выбора (вы можете использовать первый индекс «null» для метаданных, таких как значение по умолчанию).
В любом случае, рекомендуется создать кластерный индекс для столбцов Name, IndexKey.
Java Serialization to Byte Array, сохраненный как BLOB, будет вашим лучшим выбором. Java значительно упростит сериализацию большого массива. Используйте остальные столбцы строк для чего-либо, что вас интересует при запросе или отображении. Также может быть хорошей идеей сохранить BLOB в своей собственной таблице и иметь «обычные» строки, указывающие на строки «BLOB», если вы много раз запрашиваете и отправляете данные не BLOB (хотя это может варьироваться в зависимости от реализации базы данных).
HSQLDB 2.0 поддерживает одномерные массивы, хранящиеся в виде столбца таблицы. Таким образом, каждая строка таблицы будет соответствовать одной строке 2D-массива.
Но если вы хотите получить 2D-массив в целом, BLOB - лучшее решение.
- 1. хранение данных в базах данных в android
- 2. Хранение данных в двух разных базах данных (MySQL и MongoDB)
- 3. Хранение массивов в кеше
- 4. Хранение массивов в MySQL?
- 5. Хранение множества массивов в рельсах базы данных
- 6. Хранение массивов текста в базе данных синтаксиса
- 7. Хранение огромных массивов в базе данных
- 8. Хранение целочисленных массивов в базе данных MySQL
- 9. Хранение массива массивов в базе данных SQLite
- 10. Хранение массивов в массивах
- 11. Хранение массивов в переменных
- 12. Хранение массивов в Solr
- 13. Что такое алгоритм обработки больших массивов в базах данных NoSQL
- 14. Хранение массивов с Firebase
- 15. Хранение массива массивов в mysql
- 16. Новичок в базах данных
- 17. Полиморфизм в базах данных
- 18. Структуры данных в базах данных
- 19. C - Хранение массивов
- 20. Хранение ассоциативных массивов Bash
- 21. Хранение списка собственных массивов
- 22. Хранение массивов в localStorage error
- 23. хранение многомерных массивов в c
- 24. Хранение объектов в массиве массивов
- 25. Хранение массивов в доступе VBA
- 26. Хранение массива массивов в массив?
- 27. Хранение вложенных массивов в cookie
- 28. Эффективность массовой вставки в базах данных NoSQL
- 29. Хранение массива в базах sqlite/pg с помощью ActiveRecord
- 30. Хранение массивов в данных и их отображение в руле
Вам нужен случайный доступ к элементам массива или только к массивам? – gnud 2008-10-17 20:34:36
Знаете ли вы решение для PostgreSQL? – luksmir 2013-07-04 13:23:21