Document db
-
Upload
christian-holm-diget -
Category
Software
-
view
65 -
download
3
Transcript of Document db
Hvem er [email protected]@dotnetnerd
Dokumentdatabaser
• Ingen schema• Json• Nestede komplekse datastrukturer• Advancerede query muligheder• Matcher godt med objektmodeller
Hvordan adskiller DocumentDB sig?
• Bygget til cloud • Elasticitet• High availability
• Velkendte begreber fra SQL• SQL• Stored procedures• Triggers• User-defined functions
{Json}
Property User settable or system generated?
Purpose
_rid System generated System generated, unique and hierarchical identifier of the resource.
_etag System generated etag of the resource required for optimistic concurrency control.
_ts System generated Last updated timestamp of the resource.
_self System generated Unique addressable URI of the resource.
id User settable User defined unique name of the resource.
Brugere og rettigheder
• Account administrators• Read-only administrators• Database users and permissions
• Manuelt styre adgang til resources• All / read
var docUser = new User { Id = "mobileuser" };
docUser = await client.CreateUserAsync(database.SelfLink, docUser);
var docPermission = new Permission
{
PermissionMode = PermissionMode.Read,
ResourceLink = documentCollection.SelfLink,
Id = "readperm"
};
docPermission = await client.CreatePermissionAsync(docUser.SelfLink, docPermission);
FeedResponse<Permission> permFeed = await client.ReadPermissionFeedAsync(docUser.SelfLink);
List<Permission> permList = new List<Permission>();
foreach (Permission perm in permFeed){ permList.Add(perm);}
DocumentClient userClient = new DocumentClient(new Uri(endpointUrl),permList);
Consistency levels
• Strong – quorum writes og reads. Forespørgsler er fuldt konsistente.• Bounded Staleness – write order er konsistent. Reads må være bagud
med et specificeret antal operationer (eller tid i sekunder).
• Session - write order og reads er konsistente inden for en client session.
• Eventual – reads må være ude af sekvens, eg., nogle reads ser muligvis ikke de seneste ændringer
Collections
• Container til Json dokumenter• En collection kan indeholde forskellige typer dokumenter• Sharding og fan-out queries• Skaleringsenhed for transaktioner og queries• Konfigurerbar indexering
Indexing
• Automatic• Kan slås fra (kun query på id og selflink)• Query med FeedOptions.EnableScanInQuery• Tilføj eller fjern enkelte dokumenter (whitelist/blacklist)
client.CreateDocumentAsync(defaultCollection.SelfLink,
new { Name = ”Christian", isSpeaking = true },
new RequestOptions
{
IndexingDirective = IndexingDirective.Include
}
);
Indexing modes
• Consistent• Lazy (= eventual consistency level)
var defaultCollection = new DocumentCollection { Name ="defaultCollection" };
defaultCollection.IndexingPolicy.Automatic = true;
// Set IndexingMode to Lazy for bulk import/read heavy collections.
defaultCollection.IndexingPolicy.IndexingMode = IndexingMode.Lazy;
defaultCollection = await client.CreateDocumentCollectionAsync(database.SelfLink,defaultCollection);
Tools
• Azure Portal• DocumentDBStudio (github)• Visual Studio (roadmap)
• Azure DocumentDB Data Migration Tool (github)• Json• MongoDB• SQL Server• CSV
REST API
VALUE OF THE _SELF DESCRIPTION
/dbs Feed of databases under a database account.
/dbs/{_rid-db} Database with the unique id property with the value {_rid-db}.
/dbs/{_rid-db}/colls/ Feed of collections under a database.
/dbs/{_rid-db}/colls/{_rid-coll} Collection with the unique id property with the value {_rid-coll}.
/dbs/{_rid-db}/users/ Feed of users under a database.
/dbs/{_rid-db}/users/{_rid-user} User with the unique id property with the value {_rid-user}.
/dbs/{_rid-db}/users/{_rid-user}/permissions Feed of permissions under a database.
/dbs/{_rid-db}/users/{_rid-user}/permissions/{_rid-permission}
Permission with the unique id property with the value {_rid-permission}.
POST https://mydb.documents.azure.com/dbs/XP0mAA==/colls/XP0mAJ3H-AA=/docs HTTP/1.1x-ms-documentdb-isquery: Truex-ms-date: Mon, 18 Aug 2014 13:05:49 GMTauthorization: type%3dmaster%26ver%3d1.0%26sig%3dkOU%2bBn2vkvIlHypfE8AA5fulpn8zKjLwdrxBqyg0YGQ%3dx-ms-version: 2014-08-21Accept: application/jsonContent-Type: application/query+jsonHost: mydb.documents.azure.comContent-Length: 50 { query: "SELECT * FROM root WHERE (root.Person.id = 'Jens')", parameters: []}
SDK’er
• Dokumentation og samples: • http://azure.microsoft.com/da-dk/documentation/services/documentdb• https://code.msdn.microsoft.com/windowsazure/Azure-DocumentDB-NET-Code-6b3da8af
• .NET (Nuget)• LINQ
• Java• Python • Node• JavaScript (database)
Performance
• Én client i applikationens levetid• Cache selflinks• Call client.OpenAsync()• ConnectionMode (gateway/direct)• Protocol (https/tcp)
new DocumentClient(new Uri(MyEndPointUrl), MyAuthorizationKey, new ConnectionPolicy()
{
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp
});
Queries
• SQL• Parameters• LINQ• Forskellige typer i samme collection• Ingen Skip, Top, Count…
SELECT f.id AS familyName, c.givenName AS childGivenName, c.firstName AS childFirstName, p.givenName AS petName FROM Families f JOIN c IN f.children JOIN p IN c.petsWHERE p.givenName = "King"
User-defined functions
• JavaScript• Opret som ressource• Brug fra Queries
var udf = new UserDefinedFunction{ Id = "myUdf", Body = udfBody,}; await client.CreateUserDefinedFunctionAsync(colSelfLink, udf);
Triggers
• JavaScript• Opret som ressource• Specificeres ved operation
var triggerId = "myTrigger";Trigger trigger = new Trigger{ Id = triggerId, Body = triggerBody, TriggerOperation = TriggerOperation.Create, TriggerType = TriggerType.Post //Pre or Post};
await client.CreateTriggerAsync(colSelfLink, trigger);
var requestOptions = new RequestOptions { PostTriggerInclude = new List<string> { triggerId } };
await client.CreateDocumentAsync(colSelfLink, myDocument, requestOptions);
Stored procedures
• JavaScript• Opret som ressource• Execute• Tidsgrænse
await _client.CreateStoredProcedureAsync(colSelfLink, new StoredProcedure() { Id = "mySproc", Body = sprocBody });
var sproc = _client.CreateStoredProcedureQuery(colSelfLink) .ToList().Single(sp => sp.Id == "mySproc");
var sprocResponse = await _client.ExecuteStoredProcedureAsync<int>(sproc.SelfLink, objData);
Transaktioner
• Dybt integrerede i javascript modellen• Funktion = ACID transaktion med snapshot isolation• Exception => rollback