2010-12-14 21 views
1

Je me demandais ce qui est une solution de base de données viable pour le stockage local sur Windows Phone 7 en ce moment. En utilisant la recherche, je suis tombé sur ces 2 fils mais ils ont plus de quelques mois. Je me demandais s'il y avait de nouveaux développements dans les bases de données pour WP7. Et je n'ai trouvé aucun avis sur les bases de données mentionnées dans les liens ci-dessous.Qu'est-ce qu'une base de données locale viable pour Windows Phone 7 maintenant?

Mes exigences sont les suivantes:

  • Il devrait être libre pour un usage commercial
  • Sauvegarde/mise à jour d'un enregistrement ne devrait enregistrer l'enregistrement réel et non l'ensemble de la base de données (contrairement à WinPhone7 DB)
  • Possibilité de requête rapide sur une table avec ~ 1000 enregistrements en utilisant LINQ.
  • devrait fonctionner également dans le simulateur

EDIT:
juste essayé Sterling en utilisant une application de test simple: Il semble bon, mais j'ai 2 questions.

  1. La création de 1000 enregistrements prend 30 secondes en utilisant db.Save(myPerson). La personne est une classe simple avec 5 propriétés. Puis j'ai découvert qu'il y avait une méthode db.SaveAsync<Person>(IList). C'est très bien car cela ne bloque plus le thread actuel.
    MAIS ma question est: Est-ce que c'est enregistrer pour appeler db.Flush() immédiatement et faire une requête sur le IList en cours d'enregistrement? (car il faut jusqu'à 30 secondes pour enregistrer les enregistrements en mode synchrone). Ou dois-je attendre que BackgroundWorker ait fini de sauvegarder?

  2. Interrogez ces 1000 enregistrements avec LINQ et une clause where la première fois prend jusqu'à 14 secondes à charger dans la mémoire.
    Y at-il un moyen d'accélérer cela?

Voici quelques résultats de référence: (tests unitaires ont été exécutés sur un HTC Trophy)

 
----------------------------- 
purging: 7,59 sec 
creating 1000 records: 0,006 sec 
saving 1000 records: 32,374 sec 
flushing 1000 records: 0,07 sec 
----------------------------- 
//async 
creating 1000 records: 0,04 sec 
saving 1000 records: 0,004 sec 
flushing 1000 records: 0 sec 
----------------------------- 
//get all keys 
persons list count = 1000 (0,007) 
----------------------------- 
//get all persons with a where clause 
persons list with query count = 26 (14,241) 
----------------------------- 
//update 1 property of 1 record + save 
persons list with query count = 26 (0,003s) 
db saved (0,072s) 
+1

Je vois qu'il ya deux voix près sur prémisse d'être subjective/argumentatif. Changer le libellé "qu'est-ce qui est le mieux" pour "ce qui est viable" devrait répondre à cela ... si Buju ne voit pas d'inconvénient à ce libellé pour sa question? –

+0

ok thx, c'est bien avec moi – Buju

+0

En passant, vous devriez télécharger la dernière version. Il y avait un problème avec le fournisseur de stockage isolé, il est beaucoup plus rapide maintenant. –

Répondre

5

Vous pouvez jeter un oeil à Sterling - il devrait aborder la plupart de vos préoccupations et est très flexible.

http://sterling.codeplex.com/

(divulgation complète: mon projet)

+0

+1 Sterling a été autour depuis les premiers jours et Jeremy a été actif en le soutenant. –

+0

thx. Je vais essayer. – Buju

+0

Je viens d'essayer Sterling et trouvé 2 problèmes. J'ai mis à jour mon message original. – Buju

0

Perst est gratuit pour une utilisation non commerciale.

+0

sry, je veux dire gratuit pour un usage commercial. – Buju

1

est projet commercial et comme différence de Sterling, ne pas sérialiser les objets et garder tout en mémoire pour la requête.Siaqodb peut être interrogé par le fournisseur LINQ qui peut efficacement tirer de la base de données même des valeurs de champs sans créer d'objets en mémoire, ou charger/construire uniquement les objets demandés.

0

Vous pouvez également essayer Ninja Database Pro. On dirait qu'il a plus de fonctionnalités que Sterling.

http://www.kellermansoftware.com/p-43-ninja-database-pro.aspx

+0

Je leur ai envoyé un courriel pour corriger leur tableau de comparaison, car ils ont indiqué que Sterling ne prenait pas en charge plusieurs fonctionnalités. On dirait qu'ils ont juste retiré Sterling de la comparaison. Les choses clés que Sterling n'a pas: bulk & cascading delete, zéro config/auto-table, support en dehors de Silverlight. Cependant, je ne crois pas que Ninja prenne en charge les clés et les index pour l'interrogation rapide et l'indexation en utilisant LINQ sans avoir à désérialiser l'ensemble de l'objet sous-jacent. –

+0

Jeremy, Il supporte réellement faire LINQ contre les index. Seuls les objets correspondant à l'index sont désérialisés: // Obtenir une liste de personnes basée sur le nom var gregQuery = db.CreateIndexQuery ("Name", "Greg"); foreach (personne var dans gregQuery) { \t Console.WriteLine (person.PersonId); } –