2009-12-07 1 views
2

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

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

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

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

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

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

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

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

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

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

Теперь мне нужно;

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

Они хотят, чтобы увидеть все истории с будушее, например, NFL категории или Футбола категории кубка мира они могли бы хотеть, чтобы увидеть все истории с будущих датах, которые указывают предстоящие игры или события.

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

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

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

1) Найти все сообщения в subreddit: Спорт. 2) Найти сообщения в категории NFL категория. 3) Найти все сообщения с future date. Сортировка этих сообщений: всего голосов и показывать истории с ближайшая дата по сегодняшний день.

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

но насчет Кассандры, Hbase, Riak, Neo4j?

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

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

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

+0

Будет ли у него проблемы с масштабируемостью с MySQL и Memcached перед MySQL? Предполагая, что вам не нужно обслуживать абсолютно уникальные данные для каждого посетителя, это может быть хорошим подходом и избегать необходимости входить в пустыню NoSQL. –

+0

Я немного не понимаю о системе взглядов в Couchdb. Я знаю, что могу создавать несколько видов для сортировки одних и тех же данных. Но насколько сложным может быть вид? можно посмотреть 1) Найти все сообщения от subreddit: Sport. 2) Найти все сообщения в категории НФЛ. 3) Найти все сообщения с будущей датой. Сортируйте эти сообщения по большинству голосов и покажите истории с ближайшей датой до сегодняшнего дня. WOODD Мне нужно определить представление для «каждого subreddit»? потому что у меня будет около 25 000 субредадов. Пользователи смогут создавать свои собственные reddit и категории в reddit. – Toomanybrokenkeyboards

+0

Вам не нужно определять отдельный просмотр для каждого. Subreddit должен быть первым элементом ваших испущенных ключей, поэтому вы можете выбрать только один, используя поля from-to в вашем запросе. Однако вам придется иметь отдельный вид для каждой разной сортировки (не считая восходящего/нисходящего). – Zed

ответ

2

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

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

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

+0

@jbellis - btw, сортировка клиентской стороны подразумевает выполнение этого в JS или что-то подобное? – viksit