2010-12-14 5 views
1

Мне было интересно, что представляет собой жизнеспособное решение для базы данных для локального хранилища на Windows Phone 7 прямо сейчас. Используя поиск, я наткнулся на эти 2 темы, но им уже несколько месяцев. Мне было интересно, есть ли какие-то новые разработки в базах данных для WP7. И я не нашел отзывов о базах данных, упомянутых в ссылках ниже.Что такое жизнеспособная локальная база данных для Windows Phone 7 прямо сейчас?

Мои требования:

  • Он должен быть бесплатным для коммерческого использования
  • Сохранение/обновление записи следует сохранить только фактическую запись и не вся база данных (в отличие от WinPhone7 DB)
  • Возможность быстрого запроса по таблице с ~ 1000 записей с использованием LINQ.
  • Следует также работать в тренажере

EDIT:
Просто попытался Sterling, используя простой тест приложение: Он выглядит хорошо, но у меня есть 2 вопроса.

  1. Создание 1000 записей занимает 30 секунд с использованием db.Save(myPerson). Человек - это простой класс с 5 свойствами.
    Тогда я обнаружил, что существует метод db.SaveAsync<Person>(IList). Это прекрасно, потому что он больше не блокирует текущий поток.
    BUT Мой вопрос: сохранен ли он на звонок db.Flush() и делает запрос в текущем сохранении IList? (потому что для сохранения записей в синхронном режиме требуется до 30 секунд). Или мне нужно подождать, пока BackgroundWorker закончит сохранение?

  2. Запросите эти 1000 записей с помощью LINQ, а предложение where в первый раз занимает до 14 секунд для загрузки в память.
    Есть ли способ ускорить это?

Вот некоторые результаты тестов: (Модульное тестирование было выполнено на 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

Я вижу, что есть два близкие голоса на предпосылке субъективно/аргументированным. Изменение формулировки «что является лучшим» для «того, что является жизнеспособным», должно касаться этого ... если Бужу не возражает против этой формулировки по его вопросу? –

+0

ok thx, thats fine with me – Buju

+0

Кстати, вы должны скачать последнюю версию. Была проблема с изолированным поставщиком хранилища, сейчас намного быстрее. –

ответ

5

Вы можете захотеть взглянуть на Стерлинг - он должен решить большинство ваших проблем и очень гибкий.

http://sterling.codeplex.com/

(Полное раскрытие: мой проект)

+0

+1 Стерлинг существует с самого начала, и Джереми активно поддерживал его. –

+0

thx. Я дам ему попробовать. – Buju

+0

Я просто попробовал Стерлинг и нашел 2 проблемы. Я обновил свой оригинальный пост. – Buju

0

Perst бесплатно для некоммерческого использования.

+0

sry, я имею в виду бесплатно для коммерческого использования. – Buju

1

Siaqodb - коммерческий проект и в отличие от Sterling, не сериализуйте объекты и сохраняйте все в памяти для запроса. Запрос на запрос Siaqodb может быть запрошен провайдером LINQ, который эффективно может извлекать из базы данных даже значения полей без создания каких-либо объектов в памяти, или загружать/строить только те объекты, которые были запрошены.

0

Возможно, вы также захотите попробовать Ninja Database Pro. Похоже, у него больше возможностей, чем у Стерлинга.

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

+0

Я отправил им электронное письмо, чтобы исправить их таблицу сравнения, поскольку они указали, что Sterling не поддерживает несколько функций, которые она на самом деле делает. Похоже, они просто удалили Стерлинга из сравнения. Ключевые вещи: Стерлинг не имеет: объемное и каскадное удаление, нуль config/auto-table, поддержка вне Silverlight. Однако я не считаю, что Ninja поддерживает ключи и индексы для быстрого запроса и индексирования с использованием LINQ без необходимости десериализации всего базового объекта. –

+0

Джереми, он действительно поддерживает LINQ против индексов. Только те объекты, которые соответствуют индексу, десериализуются: // Получить список лиц по имени var gregQuery = db.CreateIndexQuery («Имя», «Грег»); foreach (var person in gregQuery) { \t Console.WriteLine (person.PersonId); } –

Смежные вопросы