Alex_Wells
@Alex_Wells
PHP/Kotlin

Где хранить бесконечность записей (111 * 10^29)?

Здравствуйте. Нужно хранить записи в виде key => value. Кол-во записей - 111 * 10^29 (судя по моему алгоритму). Ключ - число либо string длинной до 35 символов, value - string длинною до 60 символов. Вопрос: где можно хранить такую огромную кучу данных? Время на поиск по этой базе - 20-25 секунд. Понимаю, что обьемы данных огромные, по-этому можно хранить базу в ОЗУ (сколько это сожрет памяти на разных языках?), возможно ли?

Заранее спасибо.
  • Вопрос задан
  • 1648 просмотров
Пригласить эксперта
Ответы на вопрос 7
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Это что вы такое собрались хранить?
95*111*1029 байт ≈ 1034 байт ≈ 1022 терабайт
Значит покупаете тысячу миллионов миллионов миллионов винчестеров на 10 Tb и получаете своё хранилище.
Ответ написан
abyrkov
@abyrkov
JavaScripter
На бесконечном винчестере, разумеется. И как вы такую фигню написали?
Ответ написан
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
100 000 000 000 000 000 000 000 000 000 000 000 байт...
на флешке не поместится (
Ответ написан
Комментировать
alsopub
@alsopub
Хранить такое большое количество данных вы можете продолжать там же, где их генерируете - в алгоритме.
PS. Какой вопрос - такой ответ.
Ответ написан
Комментировать
MetaDone
@MetaDone
Хорошо сформулированный вопрос - 50% решения
Scorpi
@Scorpi
Дайте угадаю, вы решили узнать каким будет следующее число на дабле.
Успехов xD
Ответ написан
kumaxim
@kumaxim
Web-программист
Для начала проверь еще раз свой алгоритм. Скорей всего, у тебя там добрая куча дублей, если не 100%, то какие-то куски точно будут повторяться. Не верю я что все 100% будут какими-то прям очень уникальными.

Первое что ты делаешь - общие куски своей информации выносишь в отдельное поле. Такую структуру как дерево знаешь? Вот этот общий кусок будет у тебя храниться в вершине дерева. Далее, каждая вершина хранит в себе ссылки на нижестоящие узлы с какими-то другими уникальными данными и т.д. В принципе уровней вложенности у тебя может быть бесконечно много.

К вопросу где хранить. Что-то лучше жестких дисков для этого пока еще не придумали. В твоем случае будет разумнее использовать гибридное хранилище SATA + SSD + RAM. Данные, к которым обращение происходит чаще всего, лежат в Redis (т.е. RAM), просто часто используемые - на SSD, что-то редко необходимое - на SATA. Алгоритм подсчета частоты уже сам напиши, определив для своей задачи что такое часто, не очень и редко.

Кто из провайдеров может обеспечить этим - на digitalOcean есть тарифы с гибридными винтам SATA + SSD, присмотрись к ним. Советую также глянуть в сторону docker, в твоем случае, думаю, нужно будет 10+ машин для хранения, а эта штука позволит тебе управлять их конфигурацией проще.

По поводу времени на извлечение, поиск и т.д. - гугли на тему "хранение деревьев", "поиск в дереве" и т.д. Постарайся уйти от полных графов, постарайся уйти даже от циклов, даже скажу больше, НЕ ДЕЛАЙ полный граф или цикл в графе на таком объеме, ты выстрелишь себе в ногу просто.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы