4

私の英語で申し訳ありませんが、それは私の母国語ではありません。

この基本機能を備えたアプリケーションを開発したい:

  1. ユーザーは、サブタスクを含むタスクを作成できます。階層のレベルは無制限にする必要があるため、サブタスクはサブタスク自体などを持つことができます。
  2. ユーザーはタグを作成でき、すべてのタスクは無制限のレベルのタグを持つことができるため、ユーザーはいくつかのタグによってタグ付けされたすべてのタスクを表示できます。
  3. タスクはクラウドと同期する必要があります。
  4. 高速に動作するはずです。したがって、たとえば、ユーザーは次のレベルのタスクに移行したり、異なるタグを持つアイテムを表示したりする際に遅延を経験することはありません。

まあ、リマインダーなどの他の機能はたくさんありますが、生の JSON、nosql db、または sqlite のこの選択にはリンクされていません。

問題は、この機能により適しているものは何ですか?

例えば ​​:

  1. SQL では、サブタスクの ID をスキーマのどこかに保存し、n レベルの階層に対して O(n) クエリを実行する必要がありますが、json ではかなり簡単です。サブタスクであるタスクの配列を持つタスクオブジェクトを持つことができます。または、xml (JSON で実行できるかどうかはわかりません) では、サブタスクのいくつかの ID の配列を持つことができます)。私は何を選ぶべきですか、あなたはどう思いますか?
  2. JSON では、「タグ」と呼ばれる文字列項目を使用できます。そして、すべてのタスクは非常に単純なタグの配列を持つことができます。SQLでは、すべてのタグとすべてのタスクIDを持つ別のテーブル「タグ」が必要で、タグとIDの一意のペアごとに1つずつ冗長です。
  3. クラウドとの同期は JSON で簡単です。すべてのタスクを含む 1 つの大きなファイルを作成し、最新の変更がどこにあるかに応じてサーバーから、またはサーバーにアップロードすることができます (まあ、基本的には)。しかし、2 つの問題があります。しかし、この方法ではすべてのファイルを転送しますが、変更は非常に少なく、この方法ではアプリがより多くのトラフィックを消費するはずです. 多分noSQL DBはこれを解決できますか?sql でも app はそれを行うことができますが、すべての db データを転送する必要があります。
4

4 に答える 4

0

これはまだ提案されていないため、SnappyDBは非常にシンプルな API を備えた、Android 向けの NoSQL データベースです。任意のオブジェクトを永続化できます (ウェブサイトによると)。そのように使われています

try {
    DB snappydb = DBFactory.open(context); //create or open an existing databse using the default name

    snappydb.put("name", "Jack Reacher"); 
    snappydb.putInt("age", 42);  
    snappydb.putBoolean("single", true);
    snappydb.put("books", new String[]{"One Shot", "Tripwire", "61 Hours"}); 

    String   name   =  snappydb.get("name");
    int        age    =  snappydb.getInt("age");
    boolean  single =  snappydb.getBoolean("single");
    String[] books  =  snappydb.getArray("books", String.class);// get array of string

    snappydb.close();

    } catch (SnappydbException e) {
}

シリアライズ可能なオブジェクトの保存:

AtomicInteger objAtomicInt = new AtomicInteger (42);
snappyDB.put("atomic integer", objAtomicInt);
AtomicInteger myObject = snappyDB.get("atomic integer", AtomicInteger.class);

オブジェクトの保存:

MyPojo pojo = new MyPojo ();
snappyDB.put("my_pojo", pojo);
MyPojo myObject = snappyDB.getObject("non_serializable", MyPojo.class);
于 2015-08-27T09:58:31.810 に答える
0

ここにいくつかのアイデアがあります -

カウチDBは、複数のサーバー/クライアント間のレプリケーションに適したタイプのキー値ストアと見なされています. これはおそらく、説明している問題に適したタイプのデータベースです。

それ以外の場合は、REST アクセス ポイントで任意の種類の SQL/noSQL スタイルのデータベースを使用すると、シナリオで機能します。MongoDB は特に良い選択だと思います。なぜなら、キー/バリュー ストアであるにも関わらず、SQL ワードから来た人がすぐに学習できるからです。また、json でクエリへの回答を返します。つまり、NodeJS のようなものを REST サーバーとして使用している場合、物事をかなり単純化できます。

アプリケーションの一般的な構造については、 http: //developer.asana.com/documentation/ にある asana のドキュメントを参照してください。これを参考にしてください。

于 2013-08-15T08:30:41.693 に答える