Различные типы сохраненных значений в базе данных SQL - PullRequest
0 голосов
/ 10 марта 2012

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

TransactionLine.valueint
TransactionLine.valuestring
TransactionLine.valuedecimal
TransactionLine.valuebool

, или у меня должны быть отдельные таблицы для каждого типа значения транзакции значения.

TransactionLine - Table
---------------
TransactionLine.ValueId


ValueInt -Table
-------
ValueInt.ValueId
ValueInt.Value

ValueString - Table
-------
ValueString.ValueId
ValueString.Value

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Вы действительно должны посмотреть на Кассандру .Когда вы говорите много транзакций, вы имеете в виду миллионы записей?Для Кассандры обработка миллионов записей является нормой.У вас будет семейство столбцов (в rdbms таблица похожа на семейство столбцов), в котором хранится много строк, и для каждой строки вам не нужно предварительно определять столбец.Его можно определить по требованию, что значительно сокращает объем хранилища, особенно если вы имеете дело с большим количеством записей.

Вам не нужно беспокоиться, если данные имеют тип тип данных int,string, decimal или bool, потому что тип данных по умолчанию для значения столбца находится в BytesType.Существуют и другие типы данных, которые вы также можете предопределить в метаданных столбца семейства столбцов, если хотите.Поскольку вы начинаете писать приложение, я советую вам потратить некоторое время на чтение Кассандры и того, как она поможет вам в вашей ситуации.

1 голос
/ 10 марта 2012

Вы можете хранить пары ключ-значение в базе данных. Единственный тип данных, который может хранить любой другой тип данных, - это VARCHAR (MAX) или BLOB. Это означает, что все данные должны быть преобразованы в строку, прежде чем они могут быть сохранены. Это преобразование займет время обработки.

В обратном направлении, когда вы хотите сделать SUM, MAX или AVG, ... числовых данных, вам сначала нужно преобразовать строку обратно в ее реальный тип данных. Это преобразование также займет время обработки.

Базы данных читаются намного больше, чем записываются. Кошмар конверсии поставит вашу систему на колени. По этой теме было много споров. Высокая стоимость конверсий является убийцей.

Существуют системы, которые хранят всю базу данных в одной таблице. Но в этих случаях вся система строится с одной четкой целью: эффективно поддерживать эту систему на языке быстрого компилирования, таком как C (++, #), а не на языке реляционной базы данных, таком как SQL.

У меня нет идеи, я полностью понимаю, что вы действительно хотите. Если вы хотите сохранить транзакции, стоит попробовать. Но почему вы хотите хранить их по одному полю за раз? Данные хранятся в группах в записях. И тип данных каждого столбца в записи известен во время создания таблицы.

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