270 likes | 760 Views
NoSQL Databases. NoSQL Concepts, Redis, MongoDB, CouchDB. Svetlin Nakov. Telerik Software Academy. academy.telerik.com. Manager Technical Training. http://www.nakov.com. Table of Contents. NoSQL Databases Overview Redis Ultra-fast data structures server Redis Cloud: managed Redis
E N D
NoSQL Databases NoSQL Concepts, Redis, MongoDB, CouchDB Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training http://www.nakov.com
Table of Contents • NoSQL Databases Overview • Redis • Ultra-fast data structures server • Redis Cloud: managed Redis • MongoDB • Powerful and mature NoSQL database • MongoLab: managed MongoDB in the cloud
NoSQL Databases Overview, Models, Concepts, Examples
Non-Relational Data Models • Document model • Set of documents, e.g. JSON strings • Key-value model • Set of key-value pairs • Hierarchical key-value • Hierarchy of key-value pairs • Wide-column model • Key-value model with schema • Object model • Set of OOP-style objects
What is NoSQL Database? • NoSQL (cloud) databases • Use document-based model (non-relational) • Schema-free document storage • Still support indexing and querying • Still support CRUD operations (create, read, update, delete) • Still supports concurrency and transactions • Highly optimized for append / retrieve • Great performance and scalability • NoSQL == “No SQL” or “Not Only SQL”?
Relational vs. NoSQL Databases • Relational databases • Data stored as table rows • Relationships between related rows • Single entity spans multiple tables • RDBMS systems are very mature, rock solid • NoSQL databases • Data stored as documents • Single entity (document) is a single record • Documents do not have a fixed structure
Relational vs. NoSQL Models Relational Model Document Model Name: Svetlin Nakov Gender: male Phone: +359333777555 Address: - Street: Al. Malinov 31 - Post Code: 1729 - Town: Sofia - Country: Bulgaria Email: nakov@abv.bg Site: www.nakov.com * * * 1 1 1
Redis Ultra-Fast Data Structures Server
What is Redis? • Redis is • Ultra-fast in-memory key-value data store • Powerful data structures server • Open-source software: http://redis.io • Redis stores data structures: • Strings • Lists • Hash tables • Sets / sorted sets
Hosted Redis Providers • Redis Cloud • Fully managed Redis instance in the cloud • Highly scalable, highly available • Free 1 GB instance, stored in the Amazon cloud • Supports data persistence and replication • http://redis-cloud.com • Redis To Go • 5 MB free non-persistent Redis instance • http://redistogo.com
C# API for Redis • ServiceStack.Redis API • github.com/ServiceStack/ServiceStack.Redis • Sample C# code: string redisHost = "redis.garantiadata.com"; int redisPort = 14233; string redisPass = "some@pass0rd"; using (var redisClient = new RedisClient(redisHost, redisPort, redisPass)) { string key = "username"; string value = "nakov"; redisClient.Set<string>(key, value); Console.WriteLine(redisClient.Get<string>(key)); }
Redis on a Local Machine Live Demo
MongoDB Mature and Very Powerful NoSQL Database
What is MongoDB? • MongoDB – http://mongodb.org • Very powerful and mature NoSQL database • Scalable, high-performance, open-source • JSON-style document storage, schemaless • Replication & high-availability support • Auto sharding – clustering & data partitioning • Indexing and powerful querying • Map-Reduce – parallel data processing • GridFS – store files of any size
Hosted MongoDB Providers • MongoLab • Free 0.5 GB instance • https://mongolab.com • MongoHQ • Free 0.5 GB instance (sandbox) • https://www.mongohq.com • MongoOd • Free 100 MB instance • https://www.mongood.com
C# API for MongoDB • The official MongoDB C# driver from 10gen • github.com/mongodb/mongo-csharp-driver • Sample C# code: var connectionStr = "mongodb://user:pass@server:part"; var client = new MongoClient(connectionSt); var server = client.GetServer(); var db = server.GetDatabase("mongodb-name"); var persons = db.GetCollection<Person>("Persons"); persons.Insert<Person>(new Person(…)); var resultPersons = from p in persons.AsQueryable<Person>() where p.Address.Town == "Sofia" select p;
MongoDB on aLocal Machine Live Demo
NoSQL Databases http://academy.telerik.com
Exercises • Write a simple "Dictionary" application in C# or JavaScript to perform the following in MongoDB: • Add a dictionary entry (word + translation) • List all words and their translations • Find the translation of given word The UI of the application is up to you (it could be Web-based, GUI or console-based). You may use MongoDB-as-a-Service@ MongoLab. You may install the "Official MongoDBC# Driver" from NuGet or download it from its publisher: http://docs.mongodb.org/ecosystem/drivers/csharp/
Exercises (2) • Implement the previous task (a simple "Dictionary" application) using Redis. You may hold the "word + meaning pairs" in a hash (see http://redis.io/commands#hash) • See the HSET, HKEYS and HGET commands You may use a local Redis instance or register for a free "Redis To Go" account at https://redistogo.com. You may download the client libraries for your favorite programming language from http://redis.io/clients or use the "ServiceStack.Redis" C# client from the NuGet package manager.
Exercises (3) • * Implement а program, which synchronizes mouse movement and clicking between multiple computers. Users can "give control" to other users. Users sign in with username and password. Users "in control" can revoke their control. A user can be signed in on several machines at once. Store user data in MongoLab. Store the mouse sync data in the "Redis To Go" cloud. Note: In the real world data would pass through a server, as direct access from the client to the database is a security concern. This task is meant more as an experiment than a real-world scenario.
Free Trainings @ Telerik Academy • Telerik School Academy • schoolacademy.telerik.com • Telerik Software Academy • academy.telerik.com • Telerik Academy @ Facebook • facebook.com/TelerikAcademy • Telerik Software Academy Forums • forums.academy.telerik.com