2010-01-06 27 views
18

Soy un tipo incrustado, no un tipo de base de datos. Me han pedido que rediseñe un sistema existente que tiene cuellos de botella en varios lugares.¿Cuál es la "mejor" base de datos para incrustado?

El dispositivo integrado se basa en un procesador ARM 9 que funciona a 220mHz.

Debe haber una base de datos de 50k entradas (puede aumentar a 250k) cada una con 1k de datos (máximo 8 archivados). Eso es aproximado: puedo intentar obtener cifras más precisas si es necesario.

Ellos están utilizando actualmente SqlLite 2 y la planificación para mover a SqlLite 3.

Sin iniciar una guerra de mensajes - Soy un novato b/d completa simplemente la búsqueda de asesoramiento - es que la "mejor" decisión? Me doy cuenta de que esto podría ser un "¿cuánto tiempo dura un trozo de cuerda?" pregunta, pero cualquier sugerencia será bienvenida. No me importa hacer una gran cantidad de investigaciones al leer &, pero esperaba que pudieras comenzar bien. Gracias.

p.s Nuevamente, una reescritura total, puede que ni siquiera se quede con Linux incorporado, pero cambie a eCos, no se preocupe demasiado por la conversión única entre formatos d/b. Ah, y los accesos deberían ser poco frecuentes, a lo sumo uno cada pocos segundos.


edición: bien, parece que tienen entradas (30k pueden llegar a 100 mil o más) de sólo 5 o 6 campos de cada uno, pero por lo menos 3 de ellos puede ser una clave de búsqueda para un registro. Están jugando con "no tener d/b en absoluto, ya que los datos son muy simples", pero me parece que con varias claves no pudimos usar cosas elegantes como una búsqueda de tipo quicksort() (búsqueda binaria recursiva)) ¿Alguna idea sobre "no d/b", solo estructuras de datos?

Por cierto, una de las claves es 800k - no está seguro de qué tan bien SqlLite se encarga de que (tal vez sin "d/b" Tengo que hash que 800k a algo más pequeño?)

+2

sqllite parece una buena opción para quedarse con – Toad

+0

, sí, también recomendaría sqllite. – junmats

+1

¿La base de datos es incluso su cuello de botella? Según sus números, debería estar bien a menos que su almacenamiento sea realmente lento. Recuerde que hace 10 años eso se habría considerado una máquina bastante rápida. –

Respuesta

21

También SQLite es la base de datos elegida por prácticamente todos los sistemas operativos móviles. Android, Iphone OS y Symbian se envían con SQLite, lo que me hace pensar que se empleó mano de obra para optimizarlo para el procesador en esos teléfonos (casi siempre ARM).

11

me gustaría seguir con SQLite, es ampliamente compatible y bastante rico en características.

1

no estoy familiarizado con el sistema de inserción, pero el uso iphone ARM9, y sqlite como DB

6
  • Firebird (anteriormente Interbase) afirma que trabaja bien incorporado.

  • HypersonicQL (HQL) es pequeño y rápido, y también pretende ser adecuado para el uso integrado.

Por desgracia, no tengo experiencia personal para respaldar ninguno de los reclamos.

2

Sugeriré sqlite3 también. Es utilizado por muchas aplicaciones famosas.

4

SQLite es probablemente una apuesta bastante segura. Sin embargo, si el rendimiento es realmente importante para su aplicación y no necesita una base de datos relacional, le sugiero que eche un vistazo a Berkeley DB link text. Berkeley DB no es una base de datos relacional sin embargo. En otras palabras, si sus datos están agrupados en tablas diferentes y necesita constantemente consultar conjuntos de resultados que requieren datos relacionados de más de una tabla, probablemente necesite una base de datos relacional.Berkeley DB es más adecuado para algo así como las tablas de búsqueda (es decir, los datos están organizados en unas pocas tablas y no es necesario consultar datos de más de uno de ellos para producir los conjuntos de resultados que desee). Berkeley DB es muy rápido, pero requerirá más trabajo de su parte para aprovecharlo al máximo.

+0

Solo una tabla, 5 o 6 campos, pero tres de ellos se pueden usar como clave única ... y hay muchos registros: 30k, puede llegar a ser 100k, posiblemente incluso 256k – Mawg

+1

En este caso, Yo diría que Berkeley DB es absolutamente perfecto para su aplicación. Si el rendimiento es de suma importancia para su aplicación, creo que debería consultar Berkeley DB. – figurassa

+0

Aquí hay una comparación de rendimiento de sqlite y Berkeley DB: http://www.sqlite.org/cvstrac/wiki?p=KeyValueDatabase para el almacenamiento de datos clave-valor –

3

si quieres una alternativa, entonces berkeleydb vale la pena mirar. solía ser propiedad de software sleepycat, pero ahora está disponible desde Oracle. es un motor de base de datos barebones; es frontend directamente programable (en lugar de sql). se usa como parte del motor central en muchas bases de datos importantes, y como la base de datos en muchos dispositivos integrados, solía ser particularmente popular para administrar tablas de enrutamiento en enrutadores. tiende a ser pasado por alto en estos días para configuraciones más de moda, pero he encontrado que es decente, sólido y para los números que está hablando puede ser muy rápido.

2

SQLite está bien, pero no planea usarlo si planea insertar, actualizar y eliminar datos que involucren más de 6 millones de filas (todas al mismo tiempo, o cualquier parte parcial). La cuestión es que la palabra clave VACCUM debe hacerse ahora y luego y se convierte en un cuello de botella muy severo para el rendimiento, incluso cuando es automático.

Cuestiones relacionadas