Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];

Вниз

Как правильно сохранить в базу массив Double?   Найти похожие ветки 

 
Kolan ©   (2008-06-29 12:34) [0]

Здравствуйте,
 Мне нужно сохранить в базу массив чисел типа Double. Массив может содержать до 100000х4 = 400000 значений, но обычно это где-то 400х4=1600 чисел.

Использую MS SQL Server 2000.

Что для этого использовать?
 1. BLOB? Если да, то где взять примеры или книжку по работе с этим полем (я не работал с BLOB)?
 2. Может как текст его сохранять? Тогда какого типа поле использовать?


 
не магистр ни разу   (2008-06-29 13:54) [1]

ну и магистры нынче пошли.


 
Loginov Dmitry ©   (2008-06-29 14:16) [2]

> 1. BLOB?


Да


> 2. Может как текст его сохранять? Тогда какого типа поле
> использовать?


BLOB


> то где взять примеры или книжку по работе с этим полем


У TField есть все необходимые методы для работы с БЛОБ-полями. Сохраняй в TMemoryStream, а из TMemoryStream"a - в свой массив. И наоборот.


 
Anatoly Podgoretsky ©   (2008-06-29 14:24) [3]

> Kolan  (29.06.2008 12:34:00)  [0]

MS SQL 2000 не поддерживает таких длинных текстовых полей. Остается один из вариантов BLOB или отдельная нормальная таблица.


 
Kolan ©   (2008-07-02 09:13) [4]

> ну и магистры нынче пошли.

Я же аналитик :)


> отдельная нормальная таблица

Хм...

Массив — это измерение. Правильно ли я понял, что предлагается сделать таблицу:
Код измерения   |   X   |   Y
?

И насколько это правильное решение?


 
Поросенок Винни-Пух ©   (2008-07-02 09:39) [5]

ты где собираешься с массивом работать как с массивом?
на клиенте?
тогда тебе вообще не нужен массив расчесанный в таблицу. сохраняется одним блоком памяти.


 
Desdechado ©   (2008-07-02 11:30) [6]

Имхо, таблица должна хранится в таблице, а не поле.
Тем более, что наверняка найдутся ее применения для расчета на сервере, а парсить блобы - занятие неблагодарное и медленное.


 
Kolan ©   (2008-07-02 14:03) [7]

> Имхо, таблица должна хранится в таблице, а не поле.
> Тем более, что наверняка найдутся ее применения для расчета
> на сервере, а парсить блобы — занятие неблагодарное и медленное.

Мне тоже понравилось это решение, как-то сам не догадался. Всегда можно будет увидеть массив, или сохранить еще что-нить. Так и сделаю.


 
Jeer ©   (2008-07-02 18:01) [8]

Угу.
И пересоздавать таблицы при изменении размерности массива непременно и обязательно.


 
Поросенок Винни-Пух ©   (2008-07-02 18:03) [9]

Имхо, таблица должна хранится в таблице, а не поле.

Особенно когда она нужна вся целиком, а не отдельными фрагментами.


 
Jeer ©   (2008-07-02 18:09) [10]

Как вариант:

table Area:
id
area_rows
area_cols

table AreaValues:
area_id
value: double


 
Desdechado ©   (2008-07-02 18:27) [11]


> И пересоздавать таблицы при изменении размерности массива
> непременно и обязательно.

Это если делать "в лоб". А если делать "с умом", то таблица будет состоять из полей вида "координата 1, координата 2, ... координата N, значение ячейки по этим координатам". Количество измерений, имхо, меняется совсем не часто. При этом пустые значения можно не хранить.

> Особенно когда она нужна вся целиком, а не отдельными фрагментами.

Это от задачи зависит. Но сколько видел задач, которые постулировали необходимость "только целиком", все равно находились отдельные тонкости, которым достаточно было части данных. И эти тонкости использовались чаще.


 
Anatoly Podgoretsky ©   (2008-07-02 18:41) [12]


> И пересоздавать таблицы при изменении размерности массива
> непременно и обязательно.

Откуда взялись размерности, и как с ними поможет БЛОБ поле.


 
Petr V. Abramov ©   (2008-07-02 20:07) [13]

> Но сколько видел задач, которые постулировали необходимость "только целиком",
например, если массив - это картинка в каком-нить формате.


 
Desdechado ©   (2008-07-02 20:57) [14]


> Petr V. Abramov ©   (02.07.08 20:07) [13]

Если уж ты картинку представляешь в виде массива, значит, тебе явно нужна обработка отдельных точек. А если она тебе не нужна, тогда зачем такой извращенный способ хранения картинок? Не проще ли простым stream?


 
Petr V. Abramov ©   (2008-07-03 02:43) [15]


> Если уж ты картинку представляешь в виде массива, значит,
>  тебе явно нужна обработка отдельных точек.
> Desdechado ©   (02.07.08 20:57) [14]

только это не на SQL делается, и массив виде одна-запись-один-элемент бессмысленен. Если даже самые продвинутые расширения СУБД умеют делать запрос вида "все картинки, где часть тела between :value and :value",
они это делают через спец. ф-ции работы с BLOB.


 
Anatoly Podgoretsky ©   (2008-07-03 07:12) [16]

> Petr V. Abramov  (03.07.2008 2:43:15)  [15]

Зачем путать массив измерений с картинкой, как бы массив.


 
Kolan ©   (2008-07-03 10:17) [17]

Вариант с таблицей мне очень понравился. Получилось так:

      Charts
PointID [int] IDENTITY (1, 1) NOT NULL
MeasurmentID [int] NOT NULL
ChartType [int] NULL
X [float] NULL
Y [float] NULL

А на накладные расходы я плевал. :)

Благодарю за совет — сам бы не додумался.


 
Anatoly Podgoretsky ©   (2008-07-03 10:38) [18]

> Kolan  (03.07.2008 10:17:17)  [17]

Если в измерение есть разные ChartType то позволит выбирать не весь объем.
А что такое X, Y не понятно.


 
Desdechado ©   (2008-07-03 10:50) [19]


> они это делают через спец. ф-ции работы с BLOB.

Для того, чтоб такая функция сработала, нужно чтение и переваривание ВСЕГО блоба, а не 10 простых чисел по индексу. Еще не известно, что эффективнее.


 
Kolan ©   (2008-07-03 13:12) [20]


> А что такое X, Y не понятно.


Ну координаты точки вестимо. По оси абсцисс и ординат...


> Если в измерение есть разные ChartType то позволит выбирать
> не весь объем.

Измерение состоит из трёх больших графиков и трёх маленьких(три точки). У всех у них разный ChartType


 
Anatoly Podgoretsky ©   (2008-07-03 13:55) [21]

Координаты - это и есть сами измерения?

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

PointID [int] IDENTITY (1, 1) NOT NULL

Не нужно ли BigInt
Например с учетом количество измерений*3, что бы потом не больно было с переделкой.


 
Kolan ©   (2008-07-06 17:59) [22]

> Просчитай только хватит ли тебе

Наверняка не хватит, благодарю, исправлю.


 
Petr V. Abramov ©   (2008-07-07 02:00) [23]

пока задача не озвучена, ветка - островок потрепаловки в "Базах"



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
6-1199569550
korefey
2008-01-06 00:45
2009.02.22
Как передать значение на рабочий сайт используя комп. Indy


15-1229817686
Eraser
2008-12-21 03:01
2009.02.22
Java & MS CryptoAPI


15-1230113488
Strannik_v76
2008-12-24 13:11
2009.02.22
Состав MS SQL Server 2005


15-1230323029
Kerk
2008-12-26 23:23
2009.02.22
Отмечание нового года


2-1231486350
_N_
2009-01-09 10:32
2009.02.22
Как узнать об изменении положения курсора в TListView?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский