[решено] Эффективное хранение до 4 миллионов бит в TON смарт-контракте
-
Я работаю над смарт-контрактом TON, которому, возможно, потребуется хранить до 4 миллионов бит. Я понимаю из документации TON, что обычно это не рекомендуется, но я изучаю возможность для крайних случаев.
Учитывая, что ячейка может содержать до 1023 бит, мне потребовалось бы примерно 4 миллиона / 1023 × 4000 ячеек для хранения всех битов.
Моя первоначальная идея состоит в том, чтобы использовать структуру данных, которая использует словарь. Этот словарь содержал бы до 4000 ключей, причем каждый ключ соответствовал бы ячейке, содержащей 1023 бита.
Другой подход, который я рассматриваю, заключается в использовании того факта, что ячейка может ссылаться до четырех других ячеек. Итак, начав с четырех ссылочных ячеек в моем контракте, я мог бы продолжать расширять глубину иерархии каждой ячейки, чтобы сохранить полные 4 миллиона бит.
В большинстве сценариев мой контракт, скорее всего, будет использовать не более 10 000 бит. Но я хочу быть готовым к случаям, когда он может расшириться до полных 4 миллионов бит. Учитывая, что после сохранения данные будут в основном доступны для чтения (а не для частых обновлений), каков был бы наиболее эффективный способ структурирования хранилища?
-
Строго говоря, поиск наиболее эффективного способа структурирования хранилища является задачей NP-класса, что означает, что для этого потребуется слишком много ресурсов, учитывая количество битов. Словари представляют собой бинарные деревья (до 2 ветвей в ячейке), хотя их чтение и обновление на самом деле дешевле, чем квадродеревья. Поэтому я бы рекомендовал использовать dicts.