2012-11-29 2 views
3

내 문제는 초당 사용자 위치를 추적하고 1 분 안에 배열에 60 개의 값을 생성하는 것입니다. 내 서버에 간단한 PHP를 작성하여 데이터를 mysql 테이블에 저장합니다. 연결의 성격 때문에 (내가 아는 한) 안드로이드 측에서 간단한 httppost 객체로 한 요청 당 레코드를 저장할 수 있습니다. (요청은 다음과 같습니다 : xxx.com/writelocation.php?lat=33.76 & lon = 45.0 & alt = 12000) asynctask를 사용하여이 문제를 해결하려고했지만 작동하지 않았습니다. 연결이 느리고 데이터가 무거워요. 연결이 완료되고 초마다 새 레코드가 오는데 1 초 이상 걸립니다. 여러 값을 한 번에, 매분마다 보낼 수있는 방법을 찾고 있습니다. 지금까지는, 나는 원격 데이터베이스에 직접 액세스를 사용하는 것 이외의 해결책을 찾을 수 없었다. 그러나 내 호스팅은 내 mysql 데이터베이스에 대한 원격 액세스를 제공하지 않습니다.웹 서버에 여러 값을 한 번에 보내는 방법

내 문제에 대해 영리하고 저렴한 솔루션이 필요합니다. 무엇을 제안합니까? 원격 데이터베이스 (데이터베이스 호스팅) 솔루션 만 사용하고 있습니까? 사전에

감사합니다.

+0

요청한 내용은 http GET 요청입니다. POST는 서버에 더 많은 데이터를 보낼 수 있습니다 (한도는 서버 구성에 달려 있습니다). 하지만 Android에서 POST를 만드는 것은 GET과 다릅니다. http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient –

+1

첫 번째 분 동안 배열()에 데이터를 저장하지 않으시겠습니까? 두 번째 분 동안 비동기 적으로 보내고 새 데이터를 보관할 시간이 있습니다. –

+0

문제점을 해결했습니다 : JSONObjects (lat, lon etc ..)에서 정보를 수집 한 다음 JSONArray에 60 초 정보 배열을 만들고, PHP 측에서 HttpClient로 JSONArray를 보내면 jsonarray에' code' $ json = $ _REQUEST [ 'myjson']; 그리고 나서'code'로 해독하십시오 $ locationInfo = json_decode ($ json); 그리고 나서 값을 반복하여 mysql에 쓴다. 3G + 연결을 완료하는 데 3 초 정도 걸립니다. IntelliJ IDEA로 github을 구성하는 방법을 알아 내면 코드를 [github] (https://github.com/tekinbeyaz/FollowMe)에 업로드합니다. 고맙습니다. –

답변

2

Json 인코딩은 매우 빠르며 bandwish 소비는 실제로 적습니다. 나는 json을 사용하여 해당 데이터를 보낸 다음 서버 측에서 json을 구문 분석하고 데이터베이스에 데이터를 삽입하는 것이 좋습니다.

당신이 무엇에 대해 생각 http://www.vogella.com/articles/AndroidJSON/article.html

를 참조 안드로이드에 더 아부의 JSON을 이해하려면?

+1

예, 해결책입니다. 고맙습니다. 내 질문에 대한 설명에서이 방법을 설명하려고했습니다. –

+0

당신을 진심으로 환영합니다. –

2

은 INSERT 대신 INSERT DELAYED를 사용합니다. 또한 MySQL은이 경우 실제로 확장 가능한 솔루션이 아니므로 요청 량만큼 MongoSQL을 사용하는 것이 좋습니다. 또한 서버에 요청을 텍스트 파일로 저장할 수 있으며 몇 초 또는 매분마다 배치로 쿼리를 실행할 수 있습니다.

+1

PHP 세션이 File I/O보다 더 나은 솔루션이라고 생각하지 않습니까? – Shane

+0

+1에 대한 유용한 코멘트 –

+0

내가 들어 본 적이 없기 때문에 INSERT DELAYED에 대한 귀하의 의견에 대한 귀하의 의견을 한 번 올렸으며 정확한 상황에서 사용하기가 어려울 것으로 보입니다. 아주 좋은 제안. – Shane

2

매 초마다 새로운 위치를 보내려고하는 것이 근본적인 설계 결함이므로이 전략을 피하는 것이 좋습니다. 모바일 장치에서 네트워크 가용성 및 대기 시간을 보장 할 수는 없습니다.

데이터를 로컬에서 버퍼링하고이를 블록으로 서버에 제출하는 방법이 있습니다. 예를 들어, 10 분 분량의 데이터를 수집하고이를 모두 한 번에 보냅니다. 이미 발견 한 네트워크 대기 시간 제한과는 별도로 연결을 설정 한 다음 끊는 것은 네트워크 오버 헤드와 배터리 수명을 의미합니다. 따라서 데이터를 로컬에서 버퍼링하고 합리적인 간격 후에 버퍼를 보내는 여러 가지 이유로 더 좋습니다.

서버에 데이터를 보낼 때마다 POST 요청 내에서 그렇게하십시오. 이것은 중요한 크기의 데이터를 제출하는 데 사용해야하는 요청의 종류이며 나중에 데이터를 요구하는 경우 TLS를 사용하여 데이터를 암호화 할 수 있음을 의미합니다.

+0

+1 요청 오버 헤드, 로컬 버퍼, POST 요청 및 향후 TLS 교정을 시작한다. 여기에 아주 좋은 제안, 나는 그의 응용 프로그램을 개발할 때 영업 이익 고려 사항을 고려 바랍니다. – Shane

+0

경고 해 주셔서 감사합니다. 정보를 1 분 안에 버퍼링했습니다. 한 번에 여러 행의 데이터를 보내는 방법을 찾고있었습니다. 이것을 달성하는 방법을 찾지 못했다면 직접 연결을 통해 하나씩 원격 데이터베이스에 보내려고했습니다. 바라건대 나는이 위대한 공동체의 도움으로 그것을 해결할 수 있었으면 좋겠다. –

3

는 다음과 같이 배열 GET/다차원 POST를 구성 할 수있다 PHP와

PHP :


id[]=1&id[]=2&id[]=3

(이 쿼리 스트링의 일부라고 가정) 생산량 :

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

S

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에서 모두 작동합니다 : 당신이 대괄호 사이에 텍스트를 넣을 경우 imilarly, 당신은 PHP의 연관 배열 기능을 활용할 수 있습니다. 당신은 응용 프로그램에서이 같은 그것을 활용할 수 있습니다 :

LOC1 [경도 = 경도 & LOC1 [위도] = 위도 & LOC2 [경도 = 경도 & LOC2을 [위도] = 위도

그래서 당신은 얻을 :

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의

그냥 (!) 참고 : 대신 runn의 여러 개의 삽입 쿼리를 사용하면 모든 데이터를 한 번에 삽입하고 속도면에서 몇 가지 이점을 얻을 수 있습니다. 예.

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

위, 우리는 두 개의 데이터 행 ...
("John", "Doe", "20") 
("John", "Citizen", "20") 

는 또한, 데이터가 제대로 escaped 있는지 확인을 삽입했다. 이는 사용하는 데이터베이스 API에 따라 다를 수 있습니다.

관련 문제