Некоторое время назад разработчик Digg опубликовал этот блог "http://about.digg.com/blog/looking-future-cassandra",, где он описал одну из проблем, которые не были оптимально решены в MySQL. Это было названо одной из причин их перехода к Cassandra.
Я играл с MongoDB, и я хотел бы понять, как
реализовать коллекции MongoDB для этой проблемы
Из статьи, схема для этой информации в MySQL:
CREATE TABLE `Diggs` (
`id` INT(11),
`itemid` INT(11),
`userid` INT(11),
`digdate` DATETIME,
PRIMARY KEY (`id`),
KEY `user` (`userid`),
KEY `item` (`itemid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `Friends` (
`id` INT(10) AUTO_INCREMENT,
`userid` INT(10),
`username` VARCHAR(15),
`friendid` INT(10),
`friendname` VARCHAR(15),
`mutual` TINYINT(1),
`date_created` DATETIME,
PRIMARY KEY (`id`),
UNIQUE KEY `Friend_unique` (`userid`,`friendid`),
KEY `Friend_friend` (`friendid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Эта проблема повсеместна в реализации сценариев социальных сетей. Люди дружат со многими людьми, и они, в свою очередь, много копают. Очень важно быстро показать пользователю, чем занимаются его друзья.
Я понимаю, что с тех пор несколько блогов предоставили чистое решение RDBM с индексами для этой проблемы; однако мне любопытно, как это можно решить в MongoDB.