Задать вопрос

Как выбирать в базе данных уникальные значения, сравнивая два массива?

База данных имеет таблицу "Контакты", в которой ~100.000 строк.
Пользователям №1 и 2 принадлежит по 1000 строк (контактов) из этой таблицы.
Примерно 30% контактов этих пользователей совпадают (то есть это одни и те же строки из таблицы "Контакты").

Нужно сделать так, чтобы пользователь №1 получил список тех контактов пользователя №2, которых нет у пользователя №1.

Пользователь №1 может быстро добавлять себе контакты пользователя №2, после чего список не совпадающих контактов нужно обновлять.

Какую базу данных для этого использовать и как это правильно реализовать?
Мне не приходит в голову ничего, кроме простых регулярных функций. Но вот проблема, если у этих пользователей по 10.000 контактов и 90% из них совпадает, то регулярная функция уже будет тяжела. А если добавлять к каждому контакту список пользователей, у которых есть этот контакт, то проблемы будут, когда 1000+ пользователей добавят этот контакт, так как придется каждый раз запрашивать полный список пользователей, имеющих этот контакт, добавлять еще одного пользователя и сохранять потом все это.
С NoSQL не работал, но если это то, что мне нужно - то я изучу это.
  • Вопрос задан
  • 438 просмотров
Подписаться 3 Оценить Комментировать
Решение пользователя romy4 К ответам на вопрос (5)
romy4
@romy4
Exception handler
решается например в посгресе внешним джойном
select *
from contacts c1
outer join contacts c2 on c1.id=c2.id
where c1.user_id=x and c2.user_id=y
Ответ написан