Я не уверен насчет Facebook, но у нас есть несколько приложений, в которых мы используем аналогичную модель.Основа довольно проста.
База данных содержит огромное количество данных.Выполнение объединений на уровне базы данных действительно замедляет любые запросы к данным, даже если мы возвращаем только небольшое подмножество.(Скажем, например, 100 строк родительских данных и 1000 строк дочерних данных в родительско-дочерних отношениях)
Однако, используя объекты .NET DataSet, мы выбираем нужные нам строки и затем создаем объекты DataRelation.в DataSet мы наблюдаем резкое повышение производительности.
Я не могу ответить, почему это так, поскольку я не осведомлен о внутренней работе, но я могу рискнуть ...
СУБД (в нашем случае Sql Server) имеет дело с данными, которые хранятся в файлах.Эти файлы очень большие, и только очень большая их часть может быть загружена в память, даже на наших мощных SQL-серверах, поэтому при вводе-выводе на диск взимается штраф.
При небольшой загрузкеЧасть этого набора данных в наборе данных, соединение происходит полностью в памяти, поэтому мы теряем штраф ввода-вывода при переходе на диск.
Хотя я не могу полностью объяснить причину повышения производительности (и я хотел бы, чтобы кто-то более знающий сказал мне, если мои предположения верны) Я могу сказать вам, что в некоторых случаях, когда существует ОЧЕНЬ большой объем данных, но ваше приложение должно извлечь только небольшую часть,в производительности наблюдается заметная загрузка, следуя описанной модели.Мы видели, как это превращает приложения, которые просто ползают, в молниеносные приложения.
Но если все сделано неправильно, есть штраф - если вы перегружаете ОЗУ машины, но делаете это ненадлежащим образом или в любой ситуации, то у вас также будут сбои или проблемы с производительностью.