LIFO / отсортированный шаблон проектирования базы данных - PullRequest
0 голосов
/ 02 апреля 2011

Я хочу хранить данные (в виде архива) в двух отдельных списках, один из которых должен быть своего рода стеком LIFO, где новые данные просто помещаются сверху, а другой сортируется по независимому во времени значению.Данные могут быть получены позднее, но обычно меня интересуют только самые верхние значения N.Оба списка могут быть очень длинными, но содержать очень простые значения (идентификаторы документов с приоритетом).Есть ли база данных для эффективной реализации этого шаблона?Я слышал, что HBase сортирует хранилище, будет ли это полезно для такого рода приложений?

По крайней мере хранилище LIFO может быть реализовано в виде простого файла.Это мудро?Или это беспокойство по поводу преждевременной оптимизации скорости получения, то есть есть ли в SQL команды, с помощью которых я могу получить первые N по времени вставки / сортировки по значению.Или я должен осколок / paginate?

1 Ответ

1 голос
/ 03 апреля 2011

Строки или «кортежи», если хотите, специально не упорядочены в реляционной базе данных.Это считается деталью реализации.Конечно, нам все равно часто нужно навязывать порядок строк, но мы должны это делать, когда мы запрашиваем данные, а не когда мы храним их.

Я не знаю hbase, но я заметил этобыла бесплатной, поэтому, если вы можете рассмотреть MySQL как альтернативу, вот один из способов сделать то, что вы хотите.

Создайте таблицу InnoDB с автоинкрементным первичным ключом.Таблицы InnoDB сгруппированы по первичному ключу, что означает, что строки хранятся отсортированными по ключу.Поскольку вы используете автоинкрементный ключ, новые строки всегда будут иметь более высокие значения, а строки, добавленные в последовательности, будут храниться «рядом» друг с другом.Эти свойства обеспечивают быстрое извлечение X самых новых или самых старых строк, поскольку они, вероятно, будут совмещены на одних и тех же страницах данных (уменьшает количество операций ввода-вывода).

Это будет что-то вроде этого:

create table mytab(
   id       int not null auto_increment
  ,the      int
  ,rest     varchar
  ,of       char
  ,your     tinyint
  ,columns  varchar
  ,primary key(id)
)Engine=InnoDB;

Чтобы добавить 10 последних строк, вы бы запросили его следующим образом:

select *
  from mytab
 order 
    by id desc
 limit 10;

Обратите внимание, что даже если выудаляются строки, идентификатор будет увеличиваться.Так что если MAX (id) 5000, это не значит, что у вас 5000 строк.

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