Я хотел бы создать веб-сайт, содержащий некоторые элементы социальной сети.
Поэтому я пытался придумать эффективный способ хранения списка друзей (что-то вроде Facebook).
И после небольшого поиска единственное предложение, с которым я столкнулся, - это создание "таблицы" с двумя "идентификаторами", указывающими на дружбу.
Это может работать на небольших сайтах, но не кажется эффективнымнемного.
У меня есть опыт работы с Java, но я недостаточно хорошо разбираюсь в PHP.
Идея пришла мне в голову, и я думаю, что она могла бы работать довольно хорошо, проблема в том, что я не уверен, какреализовать это.
идея состоит в том, чтобы все идентификаторы ваших друзей сохранялись в древовидной структуре данных, каждый узел в этом дереве напоминает одну цифру из идентификатора друга.
сначала начинается с 1узел, а затем добавляя больше узлов, как пользователь добавляет друзей.(Немного похоже на Лемпеля-Зива).
каждый узел сможет указывать на 11 других узлов, от 0 до 9 и X.
"X" обозначает конец Id.
например, посмотрите это дерево:
Пример
В этом дереве у пользователя 4 друзей со следующими "id":
Обновление: , как могло бы бытьДо сих пор неясно, идея состоит в том, что у каждого пользователя будет дерево в виде многомерного массива, в котором наличие самих указателей указывает на «идентификатор» друга.
Если у каждого пользователя был такой многомерный массив, поискесли идентификатор "y" является моим другом, удаление идентификатора "y" из моего списка друзей или добавление идентификатора "y" в мой список друзей потребует постоянного времени O (1) без зависимости от количества пользователей, которые могут быть на сайте.есть, только отступать, взять такой огромный массив, сериализовать его и помещать его в каждый ряд таблицы просто не кажетсяверно.
-Это вообще возможно реализовать?
-Практично ли использовать сериализацию для вставки этого дерева в таблицу?
-Есть ли лучший способ сделать это?this?
Преимущества, которые я выбрал, заключаются в том, что даже при очень большом количестве идентификаторов (миллионы или миллиарды) время поиска, добавления, удаления является линейным (зависит от количества цифр).
Я был бы очень признателен за любую помощь в реализации этого или любые предложения по альтернативным способам улучшения или изменения этого метода.