Не связывайте записи memcached с таблицами, связывайте записи с сущностями (то есть строками).
Например, создайте запись memcached для каждого участника, и запись хранит список друзей этого члена.
Вот пример с PHP.Я знаю, что вы используете ASP.NET, так что рассматривайте это как псевдокод.: -)
<?php
$m = new Memcached();
$m->append('Luke.Doolittle', '|Bill Karwin');
$m->append('Bill Karwin', '|Luke.Doolittle');
Re ваши комментарии:
Проблема, которую я вижу, состоит в том, что не существует обобщенного шаблона для размещения объектов в memcached тогда.
Верно.В реляционных базах данных является формальным шаблоном для моделирования данных. Нормализация - это четко определенный метод моделирования данных для уменьшения избыточности и предотвращения аномалий.Оптимальная нормализованная организация определяется самими данными, и отношениями между данными.
В нереляционных базах данных формализация моделирования данных отсутствует.Наилучший способ организации нереляционных данных не определяется данными, это определяется вашими запросами , которые вам нужно выполнить для этих данных.Таким образом, это похоже на процесс определения индексов или применения денормализации к реляционной базе данных.
Логика будет разной для каждого типа объекта.Имеет ли это смысл?
На самом деле логика будет разной для каждого типа запроса , который необходимо запустить для этого объекта.Это то, что приводит нас к избыточному хранению данных в нереляционных хранилищах данных.Потому что мы можем захотеть выполнить множество запросов к одним и тем же данным, а это значит, что нам нужен доступ к данным по-разному для оптимизации для каждого типа запроса.
Как вы выполняете удаление, используя эту технику?
Извлечь всю строку из memcached, разобрать значения в массив, удалить элемент, который вы хотите удалить, развернуть новый массив и сохранить его обратно в memcached.
Мой пример выше был довольно прост;он также не обеспечивает уникальности.
Возможно, вам будет интересно проверить Redis , который работает как memcached, но также поддерживает списки и наборы изначально.
Я бы использовал SQL для хранения данных реляционно, используя правила нормализации.Используйте нереляционные методы в каждом конкретном случае для повышения производительности для конкретных высокоприоритетных запросов - ПОСЛЕ вы использовали профилирование, чтобы измерить и доказать, где на самом деле находятся ваши узкие места (избегайте преждевременной оптимизации).
В качестве нереляционных решений я считаю следующее:
- Денормализация
- Индексация (знаете ли вы, что в стандарте SQL индексы вообще не упоминаются?)
- Кэширование
- Хранилища данных NoSQL
Чем больше инструментов у вас в наборе инструментов, тем более гибкими вы сможете реагировать на проблемы с производительностью.