Question

Je suis un gars intégré, pas un gars de la base de données. On m'a demandé de redessiner un système existant qui a des goulots d'étranglement dans plusieurs endroits.

Le dispositif embarqué est basé sur un processeur ARM 9 fonctionnant à 220MHz.

Il devrait y avoir une base de données de 50K entrées (peut augmenter à 250k) chacune avec 1k des données (max 8 déposée). C'est approximative. - Je peux essayer d'obtenir des chiffres plus précis si nécessaire

Ils utilisent actuellement SqlLite 2 et de la planification pour passer à 3 SqlLite.

Sans se lancer dans une guerre de flamme - Je suis un débutant complet d / b simplement demander des conseils - est que la « meilleure » décision? Je me rends compte que cela pourrait être un « combien de temps est un morceau de ficelle? » question, mais tous les pointeurs conseillerai grandement les bienvenus. Je ne me dérange pas de faire beaucoup de lecture et de recherche, mais juste espéré que vous pourriez me prendre un bon départ. Merci.

p.s Encore une fois, une ré-écriture totale, pourrait même ne pas coller avec Linux embarqué, mais passer à eCos, ne vous inquiétez pas trop sur une conversion de temps entre les formats d / b. Oh, et les accès doivent être rares, au plus un toutes les quelques secondes.


edit: ok, il semble qu'ils ont 30K entrées (peut atteindre 100k ou plus) de seulement 5 ou 6 champs chacun, mais au moins trois d'entre eux peut être une clé de recherche pour un enregistrement. Ils sont caressaient « ayant pas d / b du tout, puisque les données sont si simples », mais il me semble qu'avec plusieurs clés, nous ne pouvions pas utiliser des trucs de fantaisie comme un tri rapide () Type de recherche (recherche récursive, binaire ). Toute réflexion sur « non d / b », seulement des structures de données?

BTW, une clé est 800k - ne sais pas comment gère SqlLite que (? Peut-être avec « pas d / b » Je dois hachage 800k à quelque chose plus petit)

Était-ce utile?

La solution

En outre SQLite est la base de données choisie par pratiquement tous les systèmes d'exploitation mobiles. Android, navire iPhone OS et Symbian avec SQLite ce qui me fait penser que la main-d'œuvre a été dépensé pour l'optimiser pour le processeur dans les téléphones (presque toujours ARM).

Autres conseils

Je tiendrais avec SQLite, il est largement soutenu et assez riche en fonctionnalités.

  • Firebird (Interbase précédemment) prétend travailler bien incorporé.

  • HypersonicQL (HQL) est petit et rapide et prétend également être adapté à une utilisation embarquée.

Hélas, je n'ai aucune expérience personnelle à sauvegarder soit la revendication.

SQLite est probablement un pari assez sûr. Cependant, si la performance est vraiment important pour votre application et vous n'avez pas besoin d'une base de données relationnelle, je vous suggère de jeter un oeil à Berkeley DB lien texte . Berkeley DB est pas une base de données relationnelle bien. En d'autres termes, si vos données sont regroupées dans des tableaux différents et vous devez constamment interroger les ensembles de résultats qui nécessitent des données relatives à partir de plus d'une table, vous avez probablement besoin d'une base de données relationnelle. Berkeley DB est mieux adapté à quelque chose comme regarder des tables (à savoir, les données sont organisées dans quelques tables et vous n'avez pas besoin d'interroger les données de plus d'un d'entre eux afin de produire le résultat que vous voulez ensembles). Berkeley DB est très rapide, mais il faudra plus de travail sur votre fin afin de tirer le meilleur parti de celui-ci.

si vous voulez une alternative, puis BerkeleyDB est intéressant de regarder. il a autrefois appartenu à par le logiciel Sleepycat, mais est désormais disponible auprès de l'oracle. il est un moteur de base de données barebones; est directement programmable (plutôt que d'un SQL) frontend. il est utilisé dans le cadre du moteur de base dans de nombreuses bases de données importantes, et que la base de données dans de nombreux dispositifs intégrés - il utilisé pour être particulièrement populaire pour la gestion des tables de routage dans les routeurs. il a tendance à être négligée ces jours-ci pour les configurations plus à la mode, mais je l'ai trouvé à être décent, solide et les chiffres que vous parlez à ce sujet peut être rapide comme l'éclair.

Je proposerai sqlite3 aussi. Il est utilisé par de nombreuses applications célèbres.

SQLite est ok, mais ne comptez pas utiliser si vous prévoyez d'insérer, mettre à jour et de suppression des données qui implique plus de 6 millons lignes (tous en même temps, ou une partie partielle). La chose est que le mot-clé VACCUM doit être fait everynow puis il devient un goulot d'étranglement très sévère pour la performance, même quand il est automatique.

8 ans de retard, mais comme une mise à jour: J'ai eu assez bonne expérience en utilisant Raima Database Manager . Si vous êtes à la recherche d'un faible encombrement db, ils peuvent se mettre à 40k. L'une des raisons pour lesquelles j'aime GMD est l'indépendance de la plate-forme, il est portable sur les machines 32 bits et 64 bits et entre les architectures big-endian et little-endian, ainsi que le soutien pour la plupart des systèmes d'exploitation, ce qui signifie que vous pouvez l'utiliser sur Embarqués Linux et eCos comme mentionné dans le premier poste. Et ses performances va mieux que vous ajoutez un meilleur matériel et les utilisateurs par opposition à SQLite

Je ne suis pas familier avec le système embed, mais iphone utilisation ARM9, et sqlite comme DB

Le 01-11-10 Embedded.com Bulletin fait un bon travail de couvrir ce sujet. Le bulletin d'information se trouve à Embedded.com: Embedded.com Tech focus newsletter (11/01/10). Embedding bases de données

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top