2014-10-18 8 views
4

Я использую PostgreSQL в качестве SQL-сервера для сохранения наборов данных, используемых для обучения моделей в Weka (инструмент машинного обучения).PostgreSQL создает таблицу с 841 столбцами

Weka затем считывает таблицу, создавая функцию из каждого столбца. Для этого проекта данные состоят из изображений 24x35 px, где каждый пиксель является функцией. Поэтому мне нужно создать таблицу с 841 столбцами (840 пиксельных значений, 1 id (первичный ключ)).

Изображения - изображения в оттенках серого. Поэтому каждое значение пикселя варьируется от 0 до 255. Поэтому я хочу либо сохранить его как одно целое на пиксель/столбец, либо один байт на пиксель/столбец. Однако «id» -column должен быть целым числом.

Каков наилучший/простой способ настроить таблицу такого размера?

+0

Это будет зависеть от типа, который вы используете, db имеет размер страницы 8 килобайт, поэтому строка ограничена суммой размеров типов столбцов. –

+0

@AlexK. Значения пикселей сохраняются как целые числа (~ 3,5 кБ на запись). Однако один байт на столбец должен быть достаточным, так как значения находятся в диапазоне от 0 до 255. Измените вопрос, чтобы сделать его более понятным. –

+0

Вы запрашиваете или сортируете по определенному пикселю? Если нет, если вы только когда-либо заботитесь об изображении в целом, все пиксели вместе, то нет необходимости их разбивать на пиксели. Возможно, тогда будет использоваться двоичный тип данных ['bytea'] (http://www.postgresql.org/docs/current/static/datatype-binary.html) в Postgres. –

ответ

1

Ниже перечислены 1 ответ на вопрос о максимальных столбцах и еще одна опция для переключения на 1 на многие.

Максимальное число столбцов и типы

Ответ ниже предоставляет исчерпывающую информацию относительно того, что вы должны проверить.

What is the maximum number of columns in a PostgreSQL select query

Изменения использовать 1 ко многому

Недостаток это вам придется воссоздать DB схему каждый раз, когда количество пикселей (размер изображения) изменяется.

Вместо этого, вы можете создать 1-ко-многим и есть таблица с:

image_id, pixel_number, value 

Так, для одного изображения с N пикселей вы бы:

1, 1, value 
1, 2, value 
.... 
1, N, value 
+0

Мне нравится идея использования отношения от 1 до многих. Однако таблица будет содержать не менее 25 000 записей (изображений). Используя то, что вы предложили, вы получите таблицу ~ 21 миллион строк. У Postgresql возникнут проблемы с их обработкой? Кроме того, 25k-изображения представляют собой только подмножество набора данных, положительные образцы. Там весь набор данных состоит из изображений ~ 100 тыс. Изображений. –

+0

У него не должно быть проблем, если вы поместите индексы на 'image_id', чтобы результаты возвращались быстро. –

1

ли все фотографии различных друг друга? Я имею в виду, что если многие из них идентичны, может быть, вы должны создать вторую таблицу для хранения всех фотографий по отдельности, а затем вы можете выбрать для создания таблицы от 1 до многих или от 1 до 1, например:

create table picuture 
(
    pic_id integer, 
    pic_value <whatevertypeyouwant>, 

    pk_picture primary key pic_id 
); 

-- option 1 
create table your_table 
(
    id integer, 
    pic_id_001 integer, 
    pic_id_002 integer, 
    ... 
    pic_id_840 integer, 

    pk_your_table primary key id 
); 

-- option 2 
create table your_table 
(
    id integer, 
    pic_id integer, 

    pk_your_table primary key id, pic_id 
); 
+0

Да и нет.Изображения 25k - это разные представления одного и того же объекта. 75k изображения являются «фоновыми» изображениями, используемыми для обучения классификаторов. Так что да, некоторые из изображений имеют что-то общее. Однако нет дубликатов изображений. –

+0

ОК ... даже если нет дубликатов, я выбираю второй вариант ... что, если в ближайшем будущем вам нужно будет от 840 до 1600 снимков? – Christian

+0

Число 840 фиксировано, и ничто не изменит его, если я не могу пренебречь значимыми предсказаниями. Дополнительно 840 - количество пикселей на изображение. Количество снимков в настоящий момент составляет ~ 100 000. –

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