Pull to refresh

Игрушечная ООСУБД

Reading time2 min
Views636
Предупреждение — сделано на курсовой проект и обладает серьёзными недостатками. Освобождение памяти нужно вызывать через специальный метод и сборщик мусора начинает собирать информацию в этом же потоке и делает это очень медленно. Объекты пишутся в файлы группами и нет логов поэтому надёжность ООСУБД ниже чем у любой коммерческой. И всё же есть и плюсы )))

Теперь могу похвастаться что оно умеет:


var DB = new QueryManager(1, @"Output\md.zip", true, 0.4, @"Output\index.zip", 50, @"Output\imd.zip", 0.0, true);
var firstObjectID = DB.AddObject(new MyClass{ Name = "Hello", Data = "World!" });
var secondObjectID = DB.AddObject(new MyClass{ Name = "Hi", Data = "People!" });
var firstSelectedObject = DB.Select(firstObjectID).Data as MyClass;
var secondSelectedObject = DB.Select(secondObjectID).Data as MyClass;
Console.WriteLine("First object ID: {0}\nSecond object ID: {1}\n", firstObjectID, secondObjectID);
Console.WriteLine("First selected object: {0}", firstSelectedObject.Name + ", " + firstSelectedObject.Data);
Console.WriteLine("Second selected object: {0}", secondSelectedObject.Name + ", " + secondSelectedObject.Data);
DB.Dispose();
var DB2 = new QueryManager(1, @"Output\md.zip", false, 0.4, @"Output\index.zip", 50, @"Output\imd.zip", 0.0, true);
var firstSelectedObject2 = DB2.Select(firstObjectID).Data as MyClass;
var secondSelectedObject2 = DB2.Select(secondObjectID).Data as MyClass;


Говорящая классовая диаграмма (не полная — только то что нужно для использования):



Я был вдохновлён простотой memcached поэтому такое не большое количество запросов. Запросы срабатывают только если хватит оперативной памяти.

Честно говоря пользуюсь данной поделкой для чтения/сохранения структур данных на диск. Весьма удобно благодаря тому что сама ООСУБД использует классный сериализатор Newtonsoft.Json и стандартные для .NET средства архивации. Это позволяет положить на диск любую структуру данных без необходимости предварительно создавать схему данных, при этом это будет сделано порциями по N объектов, а N можно задать.

Предвкушаю вопрос «зачем плодить велосипеды ?» — работа с большими файлами происходит зачастую быстрее и если разработчик догадывается как это можно сделать эффективнее в его приложении то производительность записи можно существенно увеличить (Ценой надёжности естественно).
Tags:
Hubs:
+6
Comments12

Articles