[Databases] Домашно NoSQL Databases


5

Не можах да дочакам утрешния workshop на @saykor и направих първа задача след малко ровене из сайта на mongodb  и правейки туториали свързани със c# от тук http://docs.mongodb.org/ecosystem/drivers/csharp/ .

Резултатът е конзолно приложение за въпросния речник.

Реших да използвам LINQ заявки за листване на думите и търсене в тях, като обяснение за това има в отделен tutorial на гореспоменатия линк. 

Не твърдя, че решението ми е от най-практичните и ще се радвам на критики :)

Решение

Edit: Направени са малки промени в имплементацията на търсене на дума и листване.




Отговори



0

Ето и моето решение:

https://app.box.com/s/a1ytrjonjbgr3sffqtcm

Регистрирах акаунти съответно в redistogo и mongohq, за да стоят данните в cloud-a. За интерфейс използвам WPF. 


от GeorgiYolovski (1147 точки)


3

Айде вие като сте направили за Mongo и Redis, аз да пусна решение за CouchDB в Cloudant(пък и защото само него съм направил де :)  ).

Решение.

 


от tankovski (2828 точки)


0
P.S. Е много яко, явно са променили презентацията и тая задачка, съм я правил за лудо...

от tankovski (2828 точки)


3

Github

Ами аз реших да си имплементирам структурата от данни речник и на Redis и на Mongo-има добавяне, търсене по ключ, работа с индексатор и може да се foreach-ват като всяка стойност на речника си има .Key и .Value пропъртита(доста удобно при Redis при положение, че иначе ви ги връща едно след друго).  Ползвам нея за да реша задачата. Има и скромен UI.

Въпрос: Само на мен ли ако ползвам [BsonConstructor] атрибута в  Mongo ми гърми с NullReferenceException? До колкото разбрах е хубаво да се ползва, но само без него ми работи.


от kirov (4821 точки)


1

Браво много добро решение. 

За по-чисто можеш да промениш няколко реда:

На 17ти ред: var wordCollection = dictionaryDB.GetCollection<Word>("words");

слагаш едно AsQueryable() на края:

dictionaryDB.GetCollection<Word>("words").AsQueryable();

 

Това:

var words =


                from w in wordCollection.AsQueryable<Word>()
                select w;
 
става на:  var words wordCollection.ToList();
 
Това:

	
var word =
                from w in wordCollection.AsQueryable<Word>()
                where w.name == searchWord
                select w;
 
На: var words wordCollection.Where(w => w.name == searchWord).ToList();

 


от saykor (8845 точки)


0
Мерси за съветите. Все пак си оставих и променливата от тип MongoCollection


0
По-скоро това: var wordCollectionQueery = dictionaryDB.GetCollection

от saykor (8845 точки)



1
MongDB има метод за добавяне, едитване, премахване, търсене и листване. Митко метни един поглед да видиш защо като правя базата с първото закачане не ми я прави в главната директория на сървара ами я вкарва в друга база казваща се локал.
Същото го направих и с Радис там нещо не можах да оползотворя класа Words а и стана доста по лесно въпреки, че не съм много сигурна в истинноста му:)
https://github.com/Gerya/TelerikAcademy/tree/master/HomeWorks/Databases/10.NoSQLDatabases

от Gerya (1079 точки)


0
Можеш вместо Extensions.ToAsciiCharArray(editWord) да извикваш като extension метод editWord.ToAsciiCharArray()

от iwitass (3695 точки)

0
Ако трябва да съм чесна тия методи ги преписах на готово от Жорката:)

от Gerya (1079 точки)


2

Решение

Работя с базите през generic класове, като идеята е да могат да се преизползват и за други цели. За монго се получи добре, но при redis не съм сигурен, защото подозирам, че за всяка дума създавам отделен хешсет. Ще съм благодарен, ако някой ми погледне кода и каже дали е така.


от georgi.ivanov (3261 точки)


1

За феновете на Redis мога да препоръчам лекцията на колегата Свилен Иванов, която задълбава по-надълбоко в тази технология: http://www.youtube.com/watch?v=JHUp92dh7bQ.


от svetlin.nakov (31978 точки)


3

Ето и моето решение. Ползвал съм голяма част от примера на Saykor от съботната лекция. За показване на резултата ползвам asp.Net, първия ми сблъсък с него.


от AsenVal (3487 точки)