1

iPhone アプリで Parse.com を使用しています。

以前に、現在ログインしているユーザーを別のユーザーの「friendsRelation」と呼ばれるPFRelationキー/列に追加しようとしていたときに問題が発生しました。これは基本的に友達リストです。

唯一の問題は、現在ログインしているユーザー以外のユーザーに変更を保存できないことです。

その後、Parse Cloud Code で「マスター キー」を使用して、使用できる回避策があることを知りました。

ここにコードをParse Cloud Codeに追加することになりました: https://stackoverflow.com/a/18651564/3344977

これはうまく機能し、これを正常にテストして、Parse データベースの文字列列/キーに NSString を追加できます。

ただし、Parse Cloud Code を変更して、ユーザーを別のユーザーの PFRelation 列/キーに追加できるようにする方法がわかりません。

リンクした上記の Parse Cloud Code を使用して過去 2 時間すべてを試してみましたが、何も動作しませんでした。その後、問題は実際のクラウド コードにあり、使用方法にあることに気付きました。私が言ったように、テスト目的で NSString オブジェクトを正常に追加できるからです。

私の問題は、javascript を知らず、構文も理解していないため、javascript で記述された Cloud Code を変更する方法がわからないことです。

上記でリンクした Parse Cloud Code を編集する必要があります。このコードは、この質問の最後に貼り付けて、現在ログインしている PFUser オブジェクトを別のユーザーの PFRelation キー/列に追加できるようにします。

Objective-C でこれを行うために使用するコードは次のようになります。

[friendsRelation addObject:user];

したがって、オブジェクトを配列に追加するのと同じであると確信していますが、先ほど言ったように、Parse Cloud Code は JavaScript であるため、変更する方法がわかりません。

パース クラウド コードは次のとおりです。

Parse.Cloud.define('editUser', function(request, response) {
    var userId = request.params.userId,
        newColText = request.params.newColText;

    var User = Parse.Object.extend('_User'),
        user = new User({ objectId: userId });

    user.set('new_col', newColText);

    Parse.Cloud.useMasterKey();
    user.save().then(function(user) {
        response.success(user);
    }, function(error) {
        response.error(error)
    });
});

次に、objective-c を使用して xcode で使用する方法を次に示します。

[PFCloud callFunction:@"editUser" withParameters:@{
    @"userId": @"someuseridhere",
    @"newColText": @"new text!"
}];

現在の PFUser を別のユーザーの PFRelation 列/キーに追加するために変更する必要があります。これは、技術的にはオブジェクトを配列に追加するだけであると確信しています。

これは、javascript に精通している人にとってはかなり簡単なはずなので、助けていただければ幸いです。

ありがとうございました。

4

1 に答える 1

3

データ モデルを再考し、ユーザー テーブルから次のものを抽出することをお勧めします。特に NoSQL データベースのデータ モデルを計画するときは、最初にクエリについて考え、それに基づいて構造を計画する必要があります。これは特にモバイル アプリケーションに当てはまります。サーバー接続にはコストがかかり、アプリが多数の接続を実行するとレイテンシの問題が発生することが多いためです。

ユーザー クラスにフォローを格納すると、フォローしているユーザーを簡単に見つけることができます。しかし、あなたをフォローしているすべてのユーザーを見つけるというタスクをどのように解決しますか? 次の関係にある場合は、すべてのユーザーを確認する必要があります。これは効率的なクエリではなく、スケーリングもうまくいきません。

ソーシャル アプリケーションを計画するときは、スケーラビリティを考慮して構築する必要があります。どんな種類のソーシャル アプリを構築しているのかはわかりませんが、そのアプリが弾道的になり、急速に成長する成功を収めたと想像してみてください。スケーラビリティを考慮して構築しないと、アプリはすぐに崩壊し、アプリが突然遅くなり、使用できなくなるため、すべてを失う可能性がありました (人々はモバイル アプリを待つことをほとんど許容しません)。

一貫性と正規化に関するこれまでの優先順位をすべて忘れ、スケーラビリティを考慮して設計します。

フォロワーとフォロワーを格納するには、これら 2 つのそれぞれに別の「テーブル」(Parse クラス) を使用します。ユーザーごとに、フォローしているすべてのユーザー名 (またはその objectId) の配列を保存します。フォロワーに対しても同じことを行います。これは、あなたが誰かをフォローすることを選択した場合、2 つのテーブルを更新する必要があることを意味します: 他のユーザーのユーザー名をフォローしているユーザーの配列に追加し (以下のテーブル)、他のユーザーの配列に自分のユーザー名を追加します。フォロワーテーブル。

この方法を使用すると、フォロワーとフォロワーのリストを非常に高速に取得できます。

Cassandra NoSQL データベースの Twitter の実装例をご覧ください: https://github.com/twissandra/twissandra

于 2014-03-17T07:47:33.820 に答える