我的问题是,我每秒跟踪用户位置,并在一分钟内在数组中生成60个值。我在我的服务器上写了一个简单的php来将数据保存到mysql表中。 由于连接的性质(据我所知),我可以在android端使用简单的httppost对象保存每个请求的记录。(请求如下:xxx.com/writelocation.php?lat=33.76&lon = 45.0&安培; ALT = 12000) 我试图通过使用asynctask解决这个问题,但它没有用。连接速度很慢,数据很重。连接完成需要一秒钟以上,每秒都会有新的记录。我正在寻找一种方法,可以在每一分钟左右发送多个值。到目前为止,除了使用直接访问远程数据库之外,我找不到解决方案。 但是我的托管不提供对我的mysql数据库的远程访问。
我需要一个聪明而便宜的解决方案来解决我的问题:)你有什么建议?是使用远程数据库(通过数据库托管)只有解决方案吗?
提前致谢。
答案 0 :(得分: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" )
在上面,我们插入了两行数据......
( "John", "Doe", "20" )
( "John", "Citizen", "20" )
另外,请确保您的数据正确escaped。这可能会因您使用的数据库API而异。
答案 1 :(得分:2)
Json编码速度非常快,而且带宽消耗非常小。我建议您使用json发送这些数据然后解析服务器端的json并将数据插入数据库。
要了解更多关于android的abou json,请参阅http://www.vogella.com/articles/AndroidJSON/article.html
你怎么看?
答案 2 :(得分:2)
使用INSERT DELAYED而不是INSERT。对于这种情况,MySQL也不是一个真正可扩展的解决方案,也许最好使用MongoSQL来满足这一要求。您也可以将请求作为文本文件保存在服务器上,并且每隔几秒或几分钟以批量运行查询
答案 3 :(得分:2)
尝试每秒发送一个新位置是一个基本的设计缺陷,我建议避免使用此策略,因为您无法保证移动设备的网络可用性和延迟。
这样做的方法是在本地缓冲数据,并将其以块的形式提交给服务器。例如,收集十分钟的数据并一次性发送。请记住,除了您已经发现的网络延迟限制之外,建立然后拆除连接会产生网络开销和电池寿命限制。因此,由于许多原因,您可以在本地缓冲数据并在合理的间隔后发送缓冲区。
每次将数据发送到服务器时,都要在POST请求中执行此操作。这是一种应该用于提交任何大小数据的请求,这也意味着如果以后需要,可以使用TLS对数据进行加密。