Я не думаю, что пространство, необходимое для хранения миллиардов троек, реально намного хуже, чем пространство, необходимое для хранения миллиардов строк в базе данных SQL.
Общий подход, используемый большинством систем на основе собственных хранилищ / на основе SQL, заключается в назначении идентификаторов узлам и сохранении каждой тройки как всего 3 идентификатора узла. Имея хороший выбор генерации идентификатора узла и эффективный индекс между идентификатором узла и значением узла, вы можете легко создавать магазины, которые масштабируются масштабно.
В качестве дальнейшей оптимизации некоторые магазины генерируют идентификаторы узлов таким образом, что простые типы значений (например, целые числа, логические значения, время и т. Д.) Кодируют свои значения непосредственно в идентификатор узла, поэтому нет необходимости выполнять поиск из Идентификатор значения (или наоборот при вставке таких данных)