2011-03-03 10 views
6

¿Cuál es la mejor manera de almacenar una gran cantidad de datos en una base de datos? Necesito almacenar los valores de varios sensores ambientales con marcas de tiempo. He hecho algunos puntos de referencia con SQLCE, funciona bien para unas pocas 100.000 filas, pero si va a los millones, los seleccionados se volverán horriblemente lentos. Mis tablas reales:Cómo almacenar eficazmente una gran cantidad de filas en una base de datos

Datapoint:[DatastreamID:int, Timestamp:datetime, Value:float] 
Datastream: [ID:int{unique index}, Uint:nvarchar, Tag:nvarchar] 

Si la consulta para puntos de datos de un flujo de datos específico y un intervalo de fechas, que lleva años. Especialmente si lo ejecuto en un dispositivo WindowsCE incorporado. Y ese es el problema principal. En mi máquina de desarrollo una consulta tomó ~ 1sek, pero en el dispositivo CE tomó ~ 5min

cada 5min Registro de 20 sensores, 12 por hora * 24 h * 365 días = 105,120 * 20 sensores = 2,102,400 (filas) por año

¡Pero podrían ser incluso más sensores!

Pensé en algún tipo de servidor webservice, pero el dispositivo no siempre puede tener una conexión a Internet/servidor.

Los datos deben poder mostrarse en el dispositivo.

¿Cómo puedo acelerar las cosas? elija otro diseño de tabla, use otra base de datos (sqlite)? Por el momento uso .netcf20 y SQLCE3.5

Algunos consejos?

+0

¿Ha indexado en los campos que se está usando como claves para la consulta? Si no, ese sería el primer paso. –

Respuesta

2

Estoy seguro de que cualquier base de datos relacional se adapte a sus necesidades. SQL Server, Oracle, etc. Lo importante es crear buenos índices para que sus consultas sean eficientes. Si tiene que hacer un escaneo de tabla solo para encontrar un solo registro, será lento independientemente de la base de datos que use.

Si siempre encuentra que está buscando un valor DataStreamID y Timestamp específico, cree un índice para él. De esta forma hará una búsqueda de índice en lugar de un escaneo.

0

La clave del acceso rápido es usar uno o más índices.

Una base de datos de dos millones de filas en un año es muy manejable.

La adición de índices ralentizará, en cierta medida, los INSERTS, pero sus datos no se mostrarán tan rápidamente, por lo que no debería ser un problema. Si los datos llegaran más rápido, podría ser más cuidadoso, pero tendría que haber muchos más datos a un ritmo mucho más rápido que el que tiene ahora para ser una preocupación.

¿Tiene acceso a SQL Server, o incluso a MySQL?

0

Su diseño debe tener estos: Clave principal en la tabla. Integer PK es más rápido.

Debe analizar sus consultas de selección para ver qué ocurre detrás de la escena. Seleccione debe hacer un SEEK en lugar de un escaneo

Si 100K lo hace lento, debe consultar la consulta a través del analizador.

Podría llegar a poco lento si tiene 100M filas, no 100K filas

espero que esto ayude

0

Se puede utilizar SQL Server Express Edition en su lugar? Puede crear índices en él al igual que en la versión completa. He trabajado muy bien con bases de datos que tienen más de 100 millones de filas en SQL Server. SQL Server Express Edition limita el tamaño de su base de datos a 10 GB, por lo que, siempre que sea posible, la versión gratuita debería funcionar para usted.

http://www.microsoft.com/express/Database/

Cuestiones relacionadas