Хранение массивов в базах данных

Это была глупая ошибка с моей стороны, но, возможно, это поможет кому-то в будущем. Это было в моей команде запуска докера.

docker run -d -p 4200:80 my-app:latest

Внутри моего докера контейнер слушал 80, но я отправлял его на 4200.

11
задан anand.trex 17 October 2008 в 20:38
поделиться

11 ответов

Большой вопрос.

Если Вы не хотите перевести свои массивы в ряд нормализованных таблиц, которые он кажется, что Вы не делаете, Вы могли бы хотеть рассмотреть сериализацию.

Сериализация является необычным словом для того, чтобы превратить объекты в некоторый формат, который можно сохранить на диск или база данных. Два главных формата для сериализации являются двоичными и XML, и я держу пари, что Java имеет некоторую поддержку его.

В зависимости от того, какие типы данных Вы используете, необходимо смочь превратить массив в XML или двоичный файл и затем сохранить это к единственному полю в базе данных. Вы могли начать с этой техникой в Java путем проверки http://java.sun.com/developer/technicalArticles/Programming/serialization/. Я знаю, что это встроено в.NET.

Надеюсь, что это помогает. Сообщите мне, могу ли я дать Вам еще направление.

15
ответ дан 3 December 2019 в 03:19
поделиться

Как насчет того, чтобы хранить данные как BLOB и использовать Java для декодирования BLOB в фактический массив Java? Это было бы намного более эффективным для того, чтобы сохранить и получить целый массив залпом, но будет ужасным для того, чтобы вертеть отдельные элементы.

8
ответ дан 3 December 2019 в 03:19
поделиться

Если только 1 массив, почему бы не использовать двоичный файл?

1
ответ дан 3 December 2019 в 03:19
поделиться

Как уже предложено: не используйте RDBMS, если Вам не нужны функции. Вместо Сериализации, хотя Вы могли бы хотеть считать низкий уровень API как JDBM, который обеспечивает некоторую базу данных как функции как управление дисковым индексом.

1
ответ дан 3 December 2019 в 03:19
поделиться

Придумайте внутреннее представление - быть этим XML, JSON, некоторый двоичный файл, который Вы придумываете сами, или любая другая форма сериализации.

Сохраните его в таблице с помощью типа данных "блоба". Сохраните любые метаданные, связанные с матрицей в дополнительных столбцах.

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

Подготовьте Ваш вставляемые/выбирать операторы заранее, и использование обязывает переменные изменять, какая матрица Вы работаете с - не заставляют дб повторно проанализировать каждый запрос.

2
ответ дан 3 December 2019 в 03:19
поделиться

Если Ваши данные плотно упаковываются (гистограмма значений близко к плоской строке), Вашим лучшим выбором является блоб и сериализация с помощью Объекта [Вывод/Вход] Поток.

Иначе Вы могли бы найти более эффективным использовать разреженные массивы и изменение схемы Значения атрибута объекта. Вот пример:

 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 'как' оператор.

Если количество Ваших размеров фиксируется для разрушения столбца ключа для разделения международных столбцов для каждого размера, чтобы повысить индексную эффективность и иметь более гибкие критерии выбора (можно использовать первый индекс 'пустой указатель' для метаданных как значение по умолчанию).

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

1
ответ дан 3 December 2019 в 03:19
поделиться

PostgreSQL имеет встроенную поддержку массивов.

http://www.postgresql.org/docs/8.0/interactive/arrays.html

0
ответ дан 3 December 2019 в 03:19
поделиться
  • Сделайте это в одной большой явной транзакции. Не вынуждайте систему баз данных создать новую неявную транзакцию для каждой вставки.
  • Используйте подготовленный оператор.
0
ответ дан 3 December 2019 в 03:19
поделиться

Определите таблицу с данными, которые содержит Ваш массив, и вставьте значения массива в таблицу.

Это - очень простой доступ к данным / устройство хранения данных. Ваши измерения массива всегда будут тем же?

0
ответ дан 3 December 2019 в 03:19
поделиться

Сериализация Java к Массиву байтов, сохраненному как BLOB, будет Вашим лучшим выбором. Java будет, сериализировал большой массив вполне эффективно. Используйте остальную часть столбцов строк для чего-либо, что Вы интересуетесь запросами на или отображением с готовностью. Это может также быть хорошая идея сохранить БЛОБЫ в их собственной таблице и иметь "регулярную" точку строк к строкам "BLOB", если Вы запрашиваете и сообщаете относительно данных не-BLOB очень (хотя это может варьироваться реализацией базы данных).

0
ответ дан 3 December 2019 в 03:19
поделиться

HSQLDB 2.0 поддерживает одномерные массивы, хранящиеся в виде столбца таблицы. Таким образом, каждая строка таблицы будет соответствовать одной строке 2D-массива.

Но если вы хотите получить двумерный массив целиком, BLOB - лучшее решение.

0
ответ дан 3 December 2019 в 03:19
поделиться
Другие вопросы по тегам:

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