3

私の問題は、1 秒あたりのユーザーの位置を追跡し、配列に 1 分で 60 個の値を作成することです。データをmysqlテーブルに保存するために、サーバーに簡単なphpを書きました。接続の性質上(私が知る限り)、Android側で単純なhttppostオブジェクトを使用して1つのリクエストごとにレコードを保存できます(リクエストは次のようになります:xxx.com/writelocation.php?lat = 33.76&lon = 45.0 &alt=12000) asynctask を使用してこれを解決しようとしましたが、うまくいきませんでした。接続が遅く、データが重い.接続が完了するまでに1秒以上かかり、毎秒新しいレコードが来る.私は一度に複数の値を1分ごとに送信する方法を探しています.これまでのところ,リモート データベースへの直接アクセスを使用する以外に解決策が見つかりませんでした。しかし、私のホスティングは私の mysql データベースへのリモート アクセスを提供しません。

私の問題に対する賢くて安価な解決策が必要です:)あなたは何を提案しますか? リモートデータベース(データベースホスティングによる)のみのソリューションを使用していますか?

前もって感謝します。

4

4 に答える 4

3

PHP

PHPを使用すると、次のように多次元POST/GET配列を作成できます。

(これはクエリ文字列の一部であると想定します)
id[]=1&id[]=2&id[]=3

生産:

array(1) {
   "ID" => array(3) {
       [1] => string(1) "1"
       [2] => string(1) "2"
       [3] => string(1) "3"
   }
}

同様に、角かっこで囲まれたテキストを挿入すると、PHPの連想配列機能を利用できます。

form[fName]=John&form[lName]=Doe&form[age]=20

生産する

array(1) {
   "form" => array(3) {
       ["fName"] => string(4) "John"
       ["lName"] => string(3) "Doe"
       ["age"]   => string(2) "20"
   }
}

言うまでもなく、これはPOSTとGETの両方で機能します。次のように、アプリケーションで使用できる場合があります。

loc1 [lon] =経度&loc1 [lat] =緯度&loc2 [lon] =経度&loc2[lat]=緯度

だからあなたは得る:

array(2) {
   "loc1" => array(2) {
       "longitude" => string(9) "longitude"
       "latitude"  => string(8) "latitude"
   }
   "loc2" => array(2) {
       "longitude" => string(9) "longitude"
       "latitude"  => string(3) "latitude"
   }
}



MySQL

補足:複数の挿入クエリを実行する代わりに、すべてのデータを一度に挿入して、速度を向上させることができます。例えば。

INSERT INTO `users` ( `fName`, `lName`, `age` ) VALUES ( "John", "Doe", "20" ),( "John", "Citizen", "42" )

上記では、2行のデータを挿入しました...

( "John", "Doe", "20" )
( "John", "Citizen", "20" )

また、データが適切にエスケープされていることを確認してください。これは、使用するデータベースAPIによって異なる場合があります。

于 2012-11-29T14:23:59.773 に答える
2

毎秒新しい場所を送信しようとするのは基本的な設計上の欠陥であり、ネットワークの可用性とモバイル デバイスからの遅延を保証できないため、この戦略を避けることをお勧めします。

それを行う方法は、データをローカルにバッファリングし、ブロックでサーバーに送信することです。例えば、10分分のデータをまとめて送信。すでに発見したネットワーク遅延の制限とは別に、接続を確立してから破棄すると、ネットワークのオーバーヘッドとバッテリ寿命が影響することに注意してください。したがって、多くの理由から、データをローカルにバッファリングし、適切な間隔を置いてからバッファを送信することをお勧めします。

データをサーバーに送信するたびに、POST リクエスト内で送信してください。これは、かなりのサイズのデータ​​を送信するために使用する必要がある種類の要求であり、後で必要になった場合に TLS を使用してデータを暗号化できることも意味します。

于 2012-11-29T14:02:39.200 に答える
2

Json エンコーディングは非常に高速であり、消費する帯域幅は非常に小さいです。json を使用してこれらのデータを送信し、サーバー側で json を解析してデータベースにデータを挿入することをお勧めします。

Android の json について詳しくは、http: //www.vogella.com/articles/AndroidJSON/article.html を参照してください。

についてどう思いますか ?

于 2012-11-29T13:49:31.410 に答える
2

INSERT の代わりに INSERT DELAYED を使用してください。また、MySQL はこの場合、実際にはスケーラブルなソリューションではありません。おそらく、この量のリクエストには MongoSQL を使用する方がよいでしょう。また、リクエストをサーバーにテキスト ファイルとして保存し、クエリを数秒または数分ごとにバッチとして実行することもできます。

于 2012-11-29T13:51:13.157 に答える