Сведения о вопросе

CPdeveloper

11:43, 11th August, 2020

Теги

Как сжатие данных более эффективно, чем индексирование для производительности поиска?

Просмотров: 499   Ответов: 2

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

При поиске данных в наших архивах резервных копий, где данные хранятся в текстовых файлах bzipped, но имеют в основном ту же структуру, я заметил, что значительно быстрее распаковать stdout и передать его через grep, чем распаковать его на диск и grep файлы. Фактически, untar-to-pipe был даже заметно быстрее, чем просто захват несжатых файлов (т. е. дисконтирование untar-to-disk).

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

Считаете ли вы, что помещение данных из нескольких строк в (сжатое) поле blob одной строки и поиск одиночных строк на лету во время извлечения может быть быстрее, чем поиск одних и тех же строк через индекс таблицы?

Например, вместо того, чтобы иметь эту таблицу

CREATE TABLE data ( `source` INT, `type` INT, `timestamp` INT, `value` DOUBLE);

Я бы так и сделал

CREATE TABLE quickdata ( `source` INT, `type` INT, `day` INT, `dayvalues` BLOB );

с примерно 100-300 строк в данных для каждой строки в quickdata и поиска нужных меток времени на лету во время декомпрессии и декодирования поля blob.

Это имеет смысл для вас? Какие параметры я должен исследовать? Какие ниточки могут быть привязаны? Какие функции DB (любые DBMS) существуют для достижения аналогичных эффектов?



  Сведения об ответе

#hash

00:44, 18th August, 2020

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

Определенно. Если вам нужно перейти на диск, производительность хит на много порядков больше, чем память. Это напоминает мне классическую статью Джима Грея " экономика распределенных вычислений :

Вычислительная экономика меняется. Сегодня существует грубый ценовой паритет между (1) одним доступом к базе данных, (2) десятью байтами сетевого трафика, (3) 100 000 инструкций, (4) 10 байтами дискового хранилища и (5) мегабайтом пропускной способности диска. Это имеет последствия для того, как структурировать распределенные вычисления в масштабе интернета: вы ставите вычисления как можно ближе к данным, чтобы избежать дорогостоящего сетевого трафика.

Вопрос, таким образом, заключается в том, сколько данных у вас есть и сколько памяти вы можете себе позволить?

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


  Сведения об ответе

+-*/

07:45, 19th August, 2020

Я сделал аналогичное открытие, работая в базе данных Python: стоимость доступа к диску очень и очень высока. Оказалось, что гораздо быстрее (т. е. почти на два порядка) запросить целый кусок данных и перебрать его в python, чем создать семь запросов, которые были более узкими. (Один в день в вопросе для данных)

Он взорвался еще больше, когда я получал почасовые данные. 24x7 много запросов это много!


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться