MySQL: хранение произвольных данных - PullRequest
1 голос
/ 17 января 2011

Справочная информация:
Я задавал вопрос о переполнении стека относительно создания таблиц на лету, где последовал этот разговор:

Это пахнеткак ужасная идея!На самом деле, он пахнет точно так же, как этот .
Для чего в мире вы хотите использовать это?- децезе@deceze: очень верно, однако, как еще вы будете хранить содержимое этих файлов CSV.
Они должны храниться в mysql для индексации.Единственный убедительный факт в том, что все они имеют мобильный столбец со стандартным форматом.
CSV может иметь произвольное количество столбцов с произвольным количеством строк.
Они могут (без преувеличения) варьироваться отодна строка, от 35 столбцов CSV до 80 тысяч строк одного столбца CSV.Я открыт для других идей.- HailwoodДля этого существует множество решений, от схем значений атрибутов до хранилищ JSON и хранилищ NoSQL.Откройте новый вопрос об этом.Что бы вы ни делали, динамически не создавайте таблицы!- deceze

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

Ответы [ 4 ]

2 голосов
/ 17 января 2011

Очень простая схема для хранения произвольно длинных записей такова:

Table `records`
===============
id
created
... other meta data ...

Table `record_attributes`
=====================
id
record_id
attribute
value

Таким образом, запись CSV может быть сохранена следующим образом:

"Foo","Bar","Baz"     // column names
42,"Lorem","Jerry"    // first record
7,"Ipsum","Tom"       // second record
...

records(1, '2010-1-17', ...)
record_attributes(1, 1, 'Foo', 42)
record_attributes(2, 1, 'Bar', 'Lorem')
record_attributes(3, 1, 'Baz', 'Jerry')

records(2, '2010-1-17', ...)
record_attributes(4, 2, 'Foo', 7)
record_attributes(5, 2, 'Bar', 'Ipsum')
record_attributes(6, 2, 'Baz', 'Tom')

Альтернативой является сохранение записиданные в виде JSON упакованного большого двоичного объекта в одном столбце.Если вам не нужно искать данные, это самый компактный способ, хотя и не очень RDBMS.

Лучше всего подойдет, вероятно, база данных NoSQL , если у вас есть такая опция.

0 голосов
/ 12 апреля 2012

Я хотел уточнить ответ deceze на записи / атрибуты записи, но комментария не хватило ...

Это напоминает модель предметов и атрибутов SimpleDB. Если вы пришли из обычного мира RDB, посмотрите документацию SimpleDB, чтобы увидеть некоторые странности, которые вам необходимо учитывать, например:

SELECT Items. *, Sizes.Value AS Size ИЗ предметов ВНУТРЕННИЕ СОЕДИНЕНИЯ Атрибуты КАК ЦВЕТЫ НА Items.ItemID = Attributes.ItemID AND Attributes.Name = 'Color' ВНУТРЕННИЕ СОЕДИНЕНИЯ Атрибуты КАК НА РАЗМЕРАХ Items.ItemID = Attributes.ItemID AND Attributes.Name = 'Size' WHERE Colors.Value = 'Red' И Sizes.Value> '003'

Вы можете структурировать этот запрос несколькими альтернативными способами, но обратите внимание на следующие основные моменты:

  • чем больше атрибутов вы хотите отфильтровать, тем больше объединений вам нужно. Обратите внимание, что вы НЕ МОЖЕТЕ просто сделать: ВЫБРАТЬ ... ИЗ ПУНКТОВ ВНУТРЕННИЕ АТРИБУТЫ, ИСПОЛЬЗУЯ ItemID WHERE (Attributes.Name = 'Color' AND Attributes.Value = 'Red') AND (Attributes.Name = 'Size' AND Attributes Значение> '003') - что самоочевидно, как только вы увидите, что оно выписано

  • если вам нужны дополнительные атрибуты в ответе, вам нужно добавить больше объединений (я включил размер, чтобы показать, что это просто для одного из уже присоединенных атрибутов). Но что, если вы хотите получить ответ, содержащий столбцы для большего количества атрибутов для выбранных элементов? Запрос начнет усложняться. По крайней мере, SimpleDB выполняет эту задачу прозрачно для вас, поэтому ответ на запрос выглядит так, как вы ожидаете, со столбцами для указанных атрибутов.

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

0 голосов
/ 06 мая 2011

Вы также можете проверить SimpleDB Amazon.Он специально разработан для этой цели.Это позволяет вам добавлять произвольные атрибуты в ваши записи и индексы по всем из них.Я уверен, что, вероятно, есть и другие решения в области NoSQL.

0 голосов
/ 17 января 2011

Может ли файл XML работать с такими вещами?Использование XQuery делает его похожим по структуре языка на SQL, и у XML нет проблем с динамическим добавлением данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...