La meilleure pratique pour stocker de grandes quantités de données avec J2ME

StackOverflow https://stackoverflow.com/questions/19011

  •  09-06-2019
  •  | 
  •  

Question

Je développe une application J2ME a une grande quantité de données à stocker sur l'appareil (dans le région de 1 MO, mais variable).Je ne peux pas compter sur le système de fichiers, donc je suis bloqué, le Système de Gestion des dossiers (RMS), ce qui permet à plusieurs magasins de disques, mais ont chacune une taille limitée.Mon objectif initial de la plateforme, Blackberry, les limites de chacun des 64 ko.

Je me demandais si quelqu'un d'autre a eu à s'attaquer au problème de stocker une grande quantité de données dans les entreprises et comment ils ont géré ça?Je pense que je vais avoir à calculer les tailles d'enregistrement et de diviser un ensemble de données à travers plusieurs magasins si sa trop grande, mais qui ajoute beaucoup de complexité pour le garder intact.

Il ya beaucoup de différents types de données stockées, mais un seul jeu, en particulier, de dépasser la limite de 64 ko.

Était-ce utile?

La solution

Pour rien passé quelques kilo-octets, vous devez utiliser la JSR 75 ou sur un serveur distant.RMS enregistrements sont extrêmement limitées en taille et en vitesse, même dans certains haut de gamme de terminaux.Si vous avez besoin de jongler avec 1 MO de données en J2ME la seule fiable, portable moyen est de les stocker sur le réseau.Le HttpConnection de la classe et les méthodes GET et POST sont toujours pris en charge.

Sur les appareils qui prennent en charge la JSR 75 FileConnection il peut être alternative valable mais sans la signature de code c'est une expérience utilisateur cauchemar.Presque tous les appels de l'API va lancer une invite de sécurité sans couverture, avec la permission de choix.Les entreprises qui déploient des applications avec la JSR 75 habituellement besoin d'une demi-douzaine de fichiers binaires pour chaque port juste pour couvrir une petite partie de certificats.Et c'est juste pour le fabricant de certificats;certains appareils seulement transporteur à verrouillage de certificats.

Autres conseils

RMS de la performance et de la mise en œuvre varie considérablement entre les appareils, de sorte que si la plate-forme la portabilité est un problème, vous pouvez constater que votre code fonctionne bien sur certains appareils, et pas d'autres.RMS est conçu pour stocker de petites quantités de données (tableaux des meilleurs scores, ou quoi que ce soit) pas de grandes quantités.

Vous trouverez peut-être que certaines plates-formes sont plus rapides avec des fichiers stockés dans plusieurs magasins de disques.Certains sont plus rapides avec plusieurs enregistrements dans un délai d'un magasin.Nombreux sont ok pour le stockage, mais devenir unusably lent lors de la suppression de grandes quantités de données à partir de la boutique.

Votre meilleur pari est d'utiliser la JSR-75 au lieu où ils sont disponibles, et de créer votre propre fichier de magasin de l'interface qui retombe à RMS, si rien n'est mieux pris en charge.

Malheureusement, quand il s'agit de JavaME, vous êtes souvent dans l'écriture de l'appareil variantes spécifiques de votre code.

Je pense que l'approche la plus souple serait de mettre en place votre propre système de fichiers sur le dessus de la RMS.Vous pouvez gérer le RMS dossiers de la même manière que les blocs sur un disque dur et d'utiliser un la structure inode ou similaire à la propagation logique des fichiers sur plusieurs blocs.Je recommande la mise en œuvre d'un octet ou d'un ruisseau d'une interface orientée sur le dessus des blocs, et puis, éventuellement, de faire un autre API couche sur le dessus de cela pour écrire spécial des structures de données (ou tout simplement vos objets sérialisables pour le flux de données).

Tanenbaum du livre classique sur les systèmes d'exploitation traite de la façon de mettre en œuvre un simple système de fichiers, mais je suis sûr que vous pouvez trouver d'autres ressources en ligne si vous n'aimez pas le papier.

Sous Blackberry OS 4.6 le RMS stocker la taille de l'augmentation de la limite de 512ko, mais ce n'est pas beaucoup d'aide, comme de nombreux appareils ne sera probablement pas avoir le support 4.6.L'autre option Blackberry est le Magasin Persistant qui a un dossier de limite de taille de 64 ko, mais pas de limite sur la taille du magasin (autres que les limites physiques de l'appareil).

Je pense que Carlos et izb sont à droite.

Il est assez simple, l'utilisation JSR75 (FileConnection) et n'oubliez pas de signer votre mobilette avec un valide (de confiance) certificat.

Pour lire seulement, je suis arrivée à la fois acceptable (à moins de 10s), par l'indexation d'un fichier de ressources.J'en ai deux ~800KO CSV la liste des prix des exportations.Programme des classes et ces deux fichiers compresser pour un POT de 300 ko.

Sur la recherche-je afficher une List et de deux Threads dans le fond de la remplir, de sorte que les premiers résultats viennent assez rapidement et sont visibles immédiatement.J'ai d'abord mis en place une simple recherche linéaire, mais c'était trop lent (~2min).

Ensuite, j'ai indexé le fichier (qui est triée par ordre alphabétique) pour trouver les débuts de chaque lettre.Maintenant, avant l'analyse ligne par ligne, j'ai d'abord InputStreamReader.skip() à la position désirée, basée sur la première lettre.Je soupçonne que le retard provient principalement de la décompression de la ressource, de sorte que le fractionnement des ressources permettrait d'accélérer davantage.Je ne veux pas le faire, de ne pas perdre l'avantage de la facilité de mise à jour.CSV exportés sans prétraitement.

Je viens juste de commencer à code pour JavaME, mais avoir de l'expérience avec les anciennes versions de PalmOS, où tous les blocs de données sont limités en taille, exigeant la conception de structures de données en utilisant le registre d'index et de décalages.

Merci à tous pour utile commments.En fin de compte la solution la plus simple était de limiter la quantité de données stockées, la mise en œuvre du code qui ajuste les données en fonction de la taille du magasin est, et de l'extraction de données à partir du serveur à la demande si elle n'est pas stockée localement.C'est intéressant de noter que la limite est augmentée dans les OS 4.6, avec un peu de chance mon code il suffit de régler sur son propre et de stocker plus de données :)

Développement d'une application J2ME pour Blackberry sans l'aide de l' .la morue compilateur limites de l'utilisation de la JSR 75 qu'un peu puisque nous ne pouvons pas signer l'archive.Comme l'a souligné Carlos c'est un problème sur n'importe quelle plateforme et j'ai eu des problèmes similaires à l'aide de la PIM partie.Le RMS semble être incroyablement lent sur la plate-forme Blackberry donc je ne suis pas sûr de l'utilité d'un inode/b-de l'arborescence du système de fichiers sur le dessus serait, à moins que des données a été mis en cache dans la mémoire et les écrits de RMS dans une faible priorité de thread d'arrière-plan.

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