предложения по созданию реферальной системы в mongodb? - PullRequest
1 голос
/ 22 июля 2011

Я хочу создать простую систему на основе ссылок в mongodb, где пользователь может использовать код для приглашения других пользователей.все пользователи будут частью одного и того же кода / группы.пользователи этой группы также могут приглашать других людей в эту группу ИЛИ создавать свои собственные.в этом случае этот пользователь становится частью ДВУХ групп (двух разных кодов).

Я хочу отслеживать следующие вещи:

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

простейшая коллекция, содержащая всю необходимую мне информацию, выглядит примерно так:

string Кодовая строка UserInitiated string UserReceived

так что с этими тремя полями в коллекции я всегда могу сказать, сколько раз пользователь инициировал код (отсылал кого-то).кого они указали.в какой код / ​​группу входит конкретный пользователь.

кажется ли это наиболее простым способом сделать это?

1 Ответ

2 голосов
/ 22 июля 2011

Я не совсем понимаю, как предложенная вами схема эффективно предоставит вам необходимую информацию.

Я бы предложил следующее:

db.groups {
    _id: <group code>,
    creator: <UUID of creator>,
}

db.members {
    _id: <UUID of group member>,
    groupCode: <group code>
    referrals: [
        <UUID of referred user>
    ]
    referralCount: <size of referrals array for speed/convenience>
}

CREATE GROUP :
db.groups.save({_id: <group code>, creator:<UUID of creator>})
db.members.save({_id:<UUID of creator>, groupCode: <group code>})

REFER USER :
db.members.update({_id: <UUID of referrer>}, {$push:{referrals: <UUID of referred user}, $inc:{referralCount:1}})

FOR A GIVEN CODE, HOW MANY PEOPLE DID YOU REFER :
db.members.find({_id: <UUID of user>, groupCode: <group code>}) -> first result .referralCount

WHICH CODES IS A USER PART OF :
db.members.find({_id: <UUID of user>}) -> results .groupCode

OR

db.members.distinct("groupCode", {_id: <UUID of user>}) for a direct array of codes

Причина, по которой я разделил его, заключается в том, что сохранение списка членов внутри документа групп в виде встроенного массива усложнит определенные обновления, может привести к ограничению документа в 16 Мб и резко увеличит требования к пропускной способности для ваших запросов (обратите внимание, что вы в таких случаях необходимо найти весь групповой документ для каждого запроса участника).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...