2008-09-30 2 views
2

Я ищу для хранения 2D-массивов 900x100 элементов в базе данных. Важное значение имеет эффективное запоминание и сравнение массивов. Я мог бы использовать таблицу со схемой, подобной [A, x, y, A (x, y)], чтобы один массив мог скомпрометировать 90 000 записей. Это похоже на дизайн ~ ok ~ для хранения массива и обеспечит эффективный отзыв отдельных элементов, но неэффективный отзыв всего массива и приведет к очень неэффективным сопоставлениям массивов.Хороший дизайн базы данных для отзыва и сравнения 2D-массивов данных?

Должен ли я оставить дизайн стола таким образом, а также построить и сравнить мои массивы в коде? Или есть лучший способ структурировать таблицу, чтобы я мог эффективно сравнивать массивы с использованием только операций с базами данных?

благодаря

+0

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

+0

Этот вопрос действительно был задан мне моим другом, поэтому я не уверен, что в настоящее время они хранят 90 000 массивов данных элементов в db или какого типа сравнения они хотят делать между массивами. Я склоняюсь к простой схеме db, как указано выше, и для сравнения, которое должно быть вычислено кодом. – LokiPatera

+0

PostgreSQL имеет поддержку массива, возможно, стоит изучить его, если есть реальная причина, по которой они не будут делать это в коде приложения. –

ответ

2

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

Кто знает, что вы можете даже сравнить это без дезактивации.

+0

Сохранение массивов в виде сериализованных двоичных объектов (OLE или BLOB) представляется лучшим методом хранения массивов внутри самой базы данных. – LokiPatera

0

900 х 100 элементов на самом деле очень мало (даже если элементы массивных 1K вещей, которые были бы только 90 МБ). Не можете ли вы просто сравнить в памяти, когда это необходимо, и сохранить на диске в каком-то сериализованном формате?

Не имеет смысла хранить 2D-массивы в базе данных, особенно если это неизменные данные.

+0

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

0

Когда я работал в сейсмической промышленности, мы просто просто сбрасывали наши массивы (обычно 1d из нескольких тысяч элементов) в двоичный файл. База данных будет использоваться только для того, что было по существу метаданными (местоположение, индексирование и т. Д.). Это было бы значительно быстрее, но это также позволило при необходимости развязать данные: в производстве это было обычным делом, несколько тысяч элементов звучат не так много, но типичный набор данных может легко составлять сотни ГБ - это 1990-е годы, поэтому мы должны были разделиться на пленку.

Смежные вопросы