Esto no escala, que empecé hace 7 años con una aplicación haciendo seguimiento de vehículos.
Tengo 3500 de esos activos ahora, imaginar la inserción de 1 registro al mismo tiempo. Esta fue una pesadilla, especialmente cuando GPRS comms fracasado a nivel del proveedor y todas las actualizaciones en espera, cada dispositivo tiene 50 registros para enviar....
Ahora mantener todos los datos en sqlite archivos por imei, y no se sirve con un servidor http (aunque se habla de http), pero con una costumbre servidor TCP. La razón es:
- escalabilidad junto con haproxy
- la sobrecarga de datos a través de GPRS cuesta dinero. Así que cada servidor de encabezado que innecesariamente enviar de vuelta va a terminar en nuestro GSM proyecto de ley.
Usted debe separar la lógica (por ejemplo, clientes, dispositivos) y todo lo que mueve tu sitio lejos de donde los eventos de los seguidores.
He aquí un esquema básico que las escalas (sqlite archivo POR única imei):
CREATE TABLE Event_customerx_all (
record_id INTEGER PRIMARY KEY,
com_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
gps_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
imei bigint(20) NOT NULL,
switch unsigned int(3) NOT NULL,
event_id unsigned int(5) NOT NULL,
latitude unsigned int(10) NOT NULL,
longitude unsigned int(10) NOT NULL,
IO unsigned int(3) NOT NULL,
raw_data BLOB NOT NULL,
sys_parsed int(3) DEFAULT NULL,
UNIQUE (imei,raw_data) ON CONFLICT IGNORE
);
Y es simple en diseño. raw_data es de 33 bytes de nuestros eventos, esta es una costumbre compresion, cada paquete es grande, máximo de 42 eventos pueden ser enviados (el dispositivo utiliza el método GET).
El uso de una clase personalizada que se puede extraer más información, como el gps, los sats en la vista fija o sats, distancia, velocidad .... etc pero realmente no se necesita a 'descomprimir' todo cuando se trata de en. Los demás datos (event_id, interruptor, gps_date etc), en realidad es también extraíbles en raw_data. Desempaquete cuando usted lo necesita.
ahora, ¿por qué es tan bueno? bien, este escalas, imagina que inventar una nueva var, ahora lo que necesita para cambiar el esquema al 'extraer' todos ellos. Pero en este caso, el software toma el cuidado de él, como su clase será capaz de extraer ese detalle del evento.
La aplicación será, básicamente, siempre queremos hacer en (general) para la mayor parte:
- Seleccione la última de la información
- Seleccione un rango de fechas (por ejemplo, viaje/pista).
La mayoría se ubican en estas 2. Así también mantener su posición más reciente (y tal vez el último evento interesante como el start/stop, como yo lo hago ...) por separado cuando se trata de.
En esta aplicación, interruptor y event_id le hacen capaz de averiguar a qué tipo de raw_data tiene, ya que en algunos eventos no tienen coordenadas, usted querrá para filtrar aquellos cuando el dibujo de un mapa, tal vez no, si usted está creando un informe....
No escriba un disparador para esta... Muy mala idea. Lo que me explique anteriormente, se ha sustituido este tipo de diseño. Y a todos aquellos 3500 clientes son recibidos por una de 8Gb Linode VPS.
Hay mucho más, pero no cometer este error le ganará años si se trata de un grave aplicación que estamos hablando. Eres bienvenido ;-)