NoSql - что лучше для моих нужд - у меня психическое расстройство - PullRequest
2 голосов
/ 07 декабря 2009

Я строю клон Reddit в Эрланге. Я рассматриваю возможность использования некоторых веб-фреймворков Erlang, но это не проблема.

У меня проблема с выбором базы данных.

Как это работает;

У меня есть несколько выделенных reddits. Примеры, наука, прикол, корпоратив, спорт. Вы могли бы рассмотреть их sub Reddits. Каждый саб реддит имеет категории.

Пользователь может опубликовать следующую информацию:

Название, категория Теги, Описание, Категория, Дата будущего ,

и добавить картинку, ссылку. видео

Как и в Reddit, пользователи смогут голосовать за истории и комментарии. Комментарии также будут иметь систему голосования.

Как проблема;

Я не знаю, какую базу данных NoSQL использовать, у сайта будут проблемы с масштабируемостью с Mysql (поверьте мне, поэтому не советую использовать sql). Будет около 10 000-20 000 одновременных соединений, если не больше.

Теперь, что мне нужно;

1) Пользователь перейдет в спортивный субреддит,

Они захотят увидеть все истории с Будущей датой , например, категорией НФЛ или Кубком мира по футболу, они могут захотеть увидеть все истории с будущими датами , которые обозначают предстоящие игры или события.

Но так как люди могут публиковать дерьмо, мне нужно сказать сортировку по дате в будущем, а затем отфильтровать результаты по сообщениям с более чем 5 голосами, затем мне нужно показать ближайшее событие.

Так что, если на выходных будет игра, а следующая игра снова через 3 недели, сначала должна появиться ближайшая игра.

2) так что проблема выше, использует одну базу данных

1) Найти все сообщения в subreddit: Sport . 2) Найти все сообщения в категории NFL . 3) Найти все сообщения с будущей датой . Сортируйте эти сообщения по большинству голосов и отображайте истории с ближайшей датой к сегодняшнему дню.

Я думаю, что couchdb выглядит хорошим кандидатом, но я не уверен

а как насчет Кассандры, Hbase, Riak, neo4j?

Я схожу с ума, пытаясь понять это.

Мне нужно что-то, что будет масштабировать и обрабатывать большое количество пользователей.

Пожалуйста, помогите, спасибо

1 Ответ

2 голосов
/ 08 декабря 2009

Кассандра должна хорошо сработать для вас; «пользователи голосуют за то, что показывают по-разному», звучит очень похоже на то, что делает Дигг (и они полностью переходят на Кассандру).

Название игры на Кассандре - денормализация. Таким образом, для каждой категории или subreddit у вас будет строка, содержащая сообщения. Если вы запрашиваете относительно небольшое количество историй за один раз, вы, вероятно, можете обойтись без денормализации самой информации о посте (включая подсчет голосов) и просто получить ее. Для больших партий вы должны продублировать это в каждом столбце сообщения, чтобы вам не приходилось делать эти дополнительные операции.

Если вы используете что-то вроде TimeUUID для временного упорядочивания ваших столбцов, то «дать мне все в категории X, что после сегодняшней даты» тривиально, а затем вы сортируете по количеству голосов на стороне клиента. (Почему бы не отсортировать серверную часть? Потому что это не масштабируется.)

...