Введение в Sterling NoSQL OODB

image
Sterling NoSQL OODB — это легковесная объектная NoSQL БД, предназначенная для использования в проектах на .NET 4.0, Silverlight 4/5 и Windows Phone 7.

Возможности


Пример использования

Предположим нам нужно хранить базу данных по видам. Опишем вот такие сущности:
enum FeedingType {
  Herbivore,
  Carnivore,
  Omnivore
}

class Feeding {
  public FeedingType Type { get; set; }
  public TimeSpan DefaultInterval { get; set; }
}

class Animal {
  public Guid Key { get; set; }
  public string Name { get; set; }
  public TimeSpan LifeExpectancy { get; set; }
  public Feeding Supply { get; set; }
}

* This source code was highlighted with Source Code Highlighter.

Соответственно хранить в базе мы будем объекты типа Animal.
Теперь нужно описать структуру нашей БД:
class BiologyDatabaseInstance: BaseDatabaseInstance {
  public const string INDEX_ANIMAL_NAME = "idx_animal_name";

  public override string Name { get { return "BiologyDb"; } }

  protected override List<ITableDefinition> RegisterTables () {
    // В нашей БД будет пока только одна таблица - животные.
    return new List<ITableDefinition> {
      CreateTableDefinition<Animal, Guid> (animal => animal.Key)
        .WithIndex<Animal, string, Guid> (INDEX_ANIMAL_NAME, animal => animal.Name)
    };
  }
}


* This source code was highlighted with Source Code Highlighter.

В БД будет одна таблица с ключом типа Guid и индексом на наименование вида.
Теперь нам нужно собственно активировать БД:
var engine = new SterlingEngine ();
engine.Activate();
var databaseInstance = engine.SterlingDatabase.RegisterDatabase<BiologyDatabaseInstance> (
  new FileSystemDriver ("C:/Temp/Animals/"));

* This source code was highlighted with Source Code Highlighter.

Вот и всё. Можно использовать. Вся работа осуществляется через экземпляр, который нам был предоставлен при регистрации. К примеру:
var catId = databaseInstance.Save (new Animal {
  Key = Guid.NewGuid (),
  LifeExpectancy = TimeSpan.FromDays (365 * 15),
  Name = "Cat",
  Supply = new Feeding {
    Type = FeedingType.Carnivore,
    DefaultInterval = TimeSpan.FromHours (12)
  }
});

var cat = databaseInstance.Load<Animal> (catId);

var orderedAnimals = databaseInstance
  .Query<Animal, string, Guid> (BiologyDatabaseInstance.INDEX_ANIMAL_NAME)
  .OrderBy (x => x.Index)
  .Select (x => x.LazyValue.Value);


* This source code was highlighted with Source Code Highlighter.

Заканчивать работу с БД следует вызовом метода Dispose().

Источники

@
08.11.2011 13:33 UTC
Первоисточник