8. {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.
11. 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);
12. 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
13. Collections
• Container til Json dokumenter
• En collection kan indeholde forskellige typer dokumenter
• Sharding og fan-out queries
• Skaleringsenhed for transaktioner og queries
• Konfigurerbar indexering
14. 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
}
);
15. 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);
17. Tools
• Azure Portal
• DocumentDBStudio (github)
• Visual Studio (roadmap)
• Azure DocumentDB Data
Migration Tool (github)
• Json
• MongoDB
• SQL Server
• CSV
18. 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.1
x-ms-documentdb-isquery: True
x-ms-date: Mon, 18 Aug 2014 13:05:49 GMT
authorization: type%3dmaster%26ver%3d1.0%26sig%3dkOU%2bBn2vkvIlHypfE8AA5fulpn8zKjLwdrxBqyg0YGQ%3d
x-ms-version: 2014-08-21
Accept: application/json
Content-Type: application/query+json
Host: mydb.documents.azure.com
Content-Length: 50
{
query: "SELECT * FROM root WHERE (root.Person.id = 'Jens')",
parameters: []
}
21. 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
});
22. 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.pets
WHERE p.givenName = "King"
23. User-defined functions
• JavaScript
• Opret som ressource
• Brug fra Queries
var udf = new UserDefinedFunction
{
Id = "myUdf",
Body = udfBody,
};
await client.CreateUserDefinedFunctionAsync(colSelfLink, udf);
24. 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);
25. 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);
26. Transaktioner
• Dybt integrerede i javascript modellen
• Funktion = ACID transaktion med snapshot isolation
• Exception => rollback