NoneDb4o - это база данных встраиваемых объектов с открытым исходным кодом для Java и.NET.

В октябре 2014 года Versant прекратил работу над db4o из-за решения Actian, нового владельца Versant.

db4o - это простая в использовании, но мощная объектная база данных. Он разработан для встроенных сценариев и работает на платформе Java и.NET.

Вы просто добавляете единую программную библиотеку db4o (.jar /.dll) в среду разработки, открываете файл базы данных и сохраняете любой объект - независимо от его сложности - с помощью всего одной строчки кода, например, на Java:

public void store(Car car) {
  ObjectContainer db = Db4oEmbedded.openFile("car.yap");
  db.store(car);
  db.close();
}

Эта непревзойденная простота использования приводит к значительному сокращению времени разработки.

Вместо использования строковых API-интерфейсов (таких как SQL, OQL, JDOQL, JPAQL и SODA), собственные запросы позволяют разработчикам просто использовать сам язык программирования (например, Java, C# или VB.NET) для доступа к базе данных и таким образом, вы получаете выгоду от проверки типов во время компиляции, полной выразительности объектно-ориентированных языков и большого удобства расширенных сред разработки.

Например, сравните этот собственный запрос на C# для.NET 3.5:

IList<Student> students =
  from Student student in container
  where student.Age < 20 && student.Grade == gradeA
  select student;

... или на Java:

List<Student> students = database.query<Student>(new Predicate<Student>() {
  public boolean match(Student student) {
    return student.getAge() < 20 && student.getGrade().equals(gradeA);
  }
});

Как видите, Native Queries исключает все строки из запросов - они на 100% безопасны по типу, на 100% реорганизуемы и на 100% объектно-ориентированы.

The same concept applies to our LINQ provider which allows you to smoothly move between Relational db and db4o, for a truly complimentary combination. db4o allows using all the constructs of Microsoft’s Language Integrated Queries (LINQ). db4o LINQ syntax is provided for.NET developers and aimed to make writing db4o code even more native and effortless.

Queries like this:

IEnumerable<Pilot> result =
  from Pilot p in container
  where p.Name.StartsWith("Michael") && p.Points > 2
  select p;

…are perfectly valid within db4o.

Another way to load objects from the database is to use the lazy transparent activation pattern. Suppose you already have the object 'c' of type Car; then you can get the pilote like this:

Pilot p = c.getPilot();

…all Pilote attribute are by db4o as you need them.

Resources: