19

私はAndroidアプリケーション開発に不慣れで、stackoverflowの新しいメンバーです。私は現在、レシピアプリケーションを設計しようとしています。アプリの機能と対象範囲を決定しました。世界中のすべてのレシピをカバーするという点で、私にとってその範囲は非常に広いです。この過程でたくさんのデータを扱うことになっています。

私は現在、アプリでデータを処理するための優れた効率的な方法を見つけようとしています。これまでのところ、さまざまなフォーラムで読んだことによると、データベースの選択に関して2つのオプションがあると思います:1)SQLite 2)リモートサーバー上のデータベース(MySql / Postgre)

以下は、2つの間で決定を下す際に私の頭の中で起こっている考えのいくつかです:

1)SQLite:これは良いオプションかもしれませんが、ファイルシステムにアクセスする必要があるので遅くなります。AsyncTaskでDBデータフェッチタスクを実行することで、速度の低下を解消できました。ただし、さまざまな電話のストレージに制限がある可能性があります。また、リモートDBを使用する場合に比べて、SQLiteを使用する方が簡単だと思います。

2)リモートデータベース:ここで確認できる問題は、複数のDBリクエストが同時に発生する場合の速度低下です。ここでスレッドを何らかの方法で使用して、複数のリクエストをキューに入れ、それらを1つずつ処理できますか?これを行うための効率的な方法はありますか?

また、上記のDBからデータを取り出したら、データのフォーマットに関してもう1つ質問があります。データのフォーマットを保持する方法はありますか?

上記のシナリオについて、知識が豊富で専門家のコメントを誰かが共有できれば幸いです。また、これは私にとって宿題ではなく、既製のコードソリューションを探していません。私は自分の考えを明確にし、決定を下すのに役立つヒント/提案を探しています。しばらく探していましたが、具体的な情報が見つかりませんでした。同様の状況に遭遇した可能性のある経験豊富な人々から、ここでいくつかの良いアドバイスを得ることができれば幸いです。

この長い投稿を読んでくれてありがとう。

4

4 に答える 4

11

両方のアプローチを組み合わせるのはどうですか?

  • 最近使用されていないレシピがあるローカルSQLiteデータベースであるため、常にネットワークは必要ありません。ネットワークは、ファイルシステムにアクセスするよりもはるかに低速です。

  • データベース全体の読み取り/書き込みが可能なHTTPインターフェイスを介してアクセスされるリモートデータベース。また、ユーザーが他のユーザーにレシピを追加して確認できるようにする場合は、とにかく外部データベースが必要になります。

SQLite:これは良いオプションかもしれませんが、ファイルシステムにアクセスする必要があるので遅くなります。

ローカルデータベースへのアクセスは非常に高速で、小さなデータベースでの単純な読み取り専用クエリの場合は5ミリ秒程度です。

ただし、別の電話のストレージには制限がある可能性があります

巨大なデータベースの定義によって異なります。テキストのみの受信トレイを大量に保存するのに十分な2MBであれば問題ありません。

また、リモートDBを使用する場合に比べて、SQLiteを使用する方が簡単だと思います。

はい、Androidには優れたSQLite APIが組み込まれていますが、リモートデータベースAPIはありません。また、データベースサーバーとインターフェイスを設定する必要はありません。

ここで確認できる問題は、複数のDBリクエストが同時に発生する場合の速度の低下です。

まともなデータベースサーバーは、何千ものリクエストを処理できます。サーバーのハードウェアとソフトウェアによって異なります。https://dba.stackexchange.com/はそれに関するより多くの情報を持っているはずです。必要なパフォーマンスは、使用している/期待しているユーザーの数によって異なります。

かなり軽量ですが、データベースをWebに直接公開しないため、データベースへの単純なRESTインターフェイスをお勧めします。データベースへのそのようなインターフェースの作成に関するチュートリアルはたくさんあります。nextDbのようなホストされたデータベースサービスでさえ、ほとんどの作業を代行してくれます。

データのフォーマットを保持する方法はありますか?

HTML形式のデータをデータベースに保存し、それをWebViewまたはTextView(via Html#fromHtml())で表示できます。どちらも形式付きのテキストを表示できます。

データベースは、保存するテキストの種類を気にしません。インターネットを介した転送では、トランスポートのフォーマット(XML、JSONなど)に干渉しないようにテキストをエンコードする必要がある場合があります。

于 2012-08-19T17:35:12.480 に答える
2

簡単な方法は、Parseをアプリに統合することです。iOSとAndroidに簡単に統合できる優れたフレームワークがあります。彼らのプランはフリーミアムなので、最大100万のAPIリクエストを無料で使用でき、その後はリクエストごとに7セントを使用できます。

すべてのデータセット/画像などを保存するために1GBが必要です。

私はすべてに解析を使用するわけではありませんが、すべてのスケーリングを行うため、大規模なデータスキームには解析を強くお勧めします。APIをチェックしてください、私はそれがあなたの時間の価値があると思います。

私は自分のプロジェクトのいくつかに取り組み始めたばかりで、Parseを再び使用しています。過去6〜8か月で大幅に改善されたと言わざるを得ません。特にTwitterとFacebookの統合で。

于 2012-08-19T17:44:00.633 に答える
1

ここでの重要な問題は、データのサイズです。レシピの重要なデータベースは大きすぎて電話に保存できないため、リモートデータベースソリューションに固執しているように見えます。

Androidからリモートデータベースにアクセスしようとするのとは対照的に、アプリケーションからのリクエストを処理し、必要なJSONオブジェクトを返すWebアプリケーション間を移動することをお勧めします。

于 2012-08-19T16:08:10.997 に答える
1

それは完全にあなたのソフトウェア要件に依存します。少量のデータを処理する必要がある場合はSQLiteを選択できますが、大量のデータを処理する場合はリモートDBを使用する方が適切です。

SQLite:少量のデータで正常に動作し、応答時間が良好であることを体験しました。

リモートDB:小さなサーバー側のアプリを使用してデータをクライアントアプリに送信できると思います。それはあなたのスレッド関連の問題/複雑さを解決/軽減します。

于 2012-08-19T16:42:33.970 に答える