database - ¿Cuál es la "mejor" base de datos para incrustar?
embedded embedded-database (10)
8 años tarde, pero como actualización: he tenido una experiencia bastante buena con Raima Database Manager . Si está buscando una base de datos de tamaño reducido, pueden llegar a 40k. Una de las razones por las que me gusta RDM es la independencia de la plataforma, es portátil en máquinas de 32 y 64 bits y entre arquitecturas de big-endian y little-endian, así como soporte para la mayoría de los sistemas operativos, lo que significa que puede usarlo en Embedded Linux y eCos como se mencionó en el primer post. Y su rendimiento mejora a medida que agrega mejor hardware y usuarios en lugar de SQLite
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.
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.
Actualmente están utilizando SqlLite 2 y planean mudarse a SqlLite 3.
Sin iniciar una guerra de llamas, soy un completo novato de d / b que solo busco consejos, ¿es esa 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 puntero será bien recibido. No me importa hacer mucha lectura e investigación, pero solo esperaba que pudieras lograr un comienzo rápido. Gracias.
De nuevo, una reescritura total, puede que ni siquiera se quede con Linux incorporado, pero cambie a eCos, no se preocupe demasiado por una conversión de tiempo entre formatos d / b. Ah, y los accesos deben ser infrecuentes, a lo sumo uno cada pocos segundos.
edición: ok, parece que tienen 30k entradas (pueden llegar a 100k o más) de solo 5 o 6 campos cada una, pero al menos 3 de ellas pueden ser una clave de búsqueda para un registro. Ellos están jugando con "no tener d / b en absoluto, ya que los datos son tan simples", pero me parece que con varias claves, no podríamos usar cosas elegantes como una búsqueda de tipo quicksort () (búsqueda recursiva, binaria) ). ¿Alguna idea sobre "no d / b", solo estructuras de datos?
Por cierto, una clave es 800k. No estoy seguro de qué tan bien lo maneja SqlLite (quizás con "no d / b" ¿Tengo que hacer hash de ese 800k a algo más pequeño?)
El boletín 01-11-10 de Embedded.com hace un buen trabajo al cubrir este tema. El boletín se puede encontrar en Embedded.com: Embedded.com Tech Focus Newsletter (1-11-10): Incrustar bases de datos .
Me quedaría con SQLite, es ampliamente compatible y bastante rico en características.
No estoy familiarizado con el sistema embebido, pero iPhone usa arm9 y sqlite como DB
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 al texto del enlace de Berkeley DB. Berkeley DB no es una base de datos relacional. En otras palabras, si sus datos se agrupan en tablas diferentes y necesita consultar constantemente los conjuntos de resultados que requieren datos relacionados de más de una tabla, probablemente necesite una base de datos relacional. Berkeley DB se adapta mejor a algo como las tablas de consulta (es decir, los datos están organizados en unas pocas tablas y no es necesario consultar datos de más de una para generar los conjuntos de resultados que desea). Berkeley DB es muy rápido, pero requerirá más trabajo para poder aprovechar al máximo.
SQLite está bien, pero no planee 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). El problema es que la palabra clave VACCUM se debe hacer en todo momento y luego se convierte en un cuello de botella muy grave para el rendimiento, incluso cuando es automático.
Si quieres una alternativa, entonces vale la pena mirar berkeleydb . solía ser propiedad del software sleepycat, pero ahora está disponible en oracle. es un motor de base de datos barebones; Es frontend directamente programable (en lugar de un sql). se usa como parte del motor central en muchas bases de datos principales, y como la base de datos en muchos dispositivos integrados, solía ser particularmente popular para administrar tablas de enrutamiento en enrutadores. tiende a pasarse 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 de los que está hablando puede ser muy rápido.
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 gastó la mano de obra para optimizarla para el procesador en esos teléfonos (casi siempre ARM).
Voy a sugerir sqlite3 también. Es utilizado por muchas aplicaciones famosas.
Firebird (anteriormente Interbase) afirma que funciona bien incrustado.
HypersonicQL (HQL) es pequeño y rápido y también afirma ser adecuado para uso integrado.
Por desgracia, no tengo experiencia personal para respaldar cualquiera de las afirmaciones.