11
2299

Имеется модуль-справочник. Например, телефонная книга - вводишь номер, получаешь фамилию.

Проблема в том, что записей в этом справочнике овердофига, на данный момент сотни тысяч. Файл с "голыми" данными в формате CSV сейчас весит 10 мегабайт.

И вот вопрос - как толковее хранить эти данные в модуле?

- Положить CSV в DATA?

- Сериализовать в JSON или Storable и положить туда же?

- Описать как структуру прямо в коде?

- Записать в файл типа DB или SQLite и хранить отдельно?

- Еще что-то?

Какой бестпрактик?

Посмотрел на CPAN'е то, что пришло в голову - как DateTime хранит список таймзон. Он их просто как структуру в коде описывает. Но там этих зон - тьфу, по сравнению с моим справочником.

Есть, конечно, вариант - написать модуль в виде интерфейса к справочнику, а сам файл справочника загружать отдельно. Но как-то это не кузяво - загрузил модуль с CPAN'а, а потом еще догадайся, что надо справочник загрузить...

Хотелось бы впихнуть справочник прямо в дистрибутив.

  • Sergey
    2015-07-29 19:21 #

    Postgresql? 10 мегабайт или сотни тысяч записей - ничто для него

    или CTRL+Enter формат
    • ivanychSergey
      2015-07-29 19:38 #

      Либо я Вас не понял, либо Вы меня.

      Вопрос не в том, где мне разместить скачанные откуда-то данные, а в том, как мне их распространять.

      или CTRL+Enter формат
  • vti
    2015-07-29 20:47 #

    __DATA__ мне кажется самое оно.

    или CTRL+Enter формат
  • thecrux
    2015-07-30 06:10 #

    Например, модуль CPANDB загружает сжатую sqlite-базу из интернета. Преимущество базы SQLite в том, что этот бинарный формат не зависит от платформы и её можно свободно копировать между различными системами. При этом доступны все преимущества SQL (высокая скорость, сложные выборки, огромные объёмы информации).

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

    или CTRL+Enter формат
Чтобы ответить, залогиньтесь или зарегистрируйтесь.
  • @user
  • _italic_

    italic

  • **bold**

    bold

  • [PP](http://pragmaticperl.com)

    PP

  • <http://pragmaticperl.com>

    http://pragmaticperl.com

  • module:Plack

    Plack

  • release:URI

    URI

  • author:VTI

    VTI

  • `my $foo = 'bar'`
  • ```
    my $multi;
    $line;
    ```