My .Net Rocks talk is available

Hi, just a quick to say that my talk with .Net Rocks is now available on their web site. In this talk I shared some insights into how F# is used in our stack to help us build the backend for our social games, specifically in the areas of:

 

Enjoy!

DynamoDB.SQL – version 1.0.7 released

Just a quick note to say that I have made some minor changes to DynamoDb.SQL and released version 1.0.7 of the library to Nuget, here’s a list of the changes:

  • fixed a bug with LIMIT when there is insufficient number of elements using the DynamoDBContext.
  • added support for counting the number of matching items with a query or scan (see below)

image

image

The Getting Started guide has also been updated to include details on how to write a Count query.

DynamoDB.SQL – minor updates

Just a quick note to say that I have made some minor changes to DynamoDb.SQL to:

  • Add support for specifying the ScanIndexForward option(see DynamoDB API doc here for detail) in a Query operation using an optional “ORDER” clause

image

  • Fixed a bug where when querying using the extension methods on the DynamoDBContext class, the LIMIT clause is not being respected. This was due to lazy-loading of results in the DynamoDBContext class, see this thread for more info.

 

The latest build can be found on Nuget as version 1.0.5.

DynamoDb.SQL – a SQL-like external DSL for Amazon DynamoDB

Amazon’s DynamoDB is a wonderful product – scalable, durable, fast, with predictable latency numbers unlike SimpleDB. However, the only gripe I have with DynamoDB is that there is no built-in support for a query language, which makes life rather difficult when you want to perform a query or a scan against the data you have in DynamoDB.

Whilst the standard AWS SDK for .Net provides a number of different ways to perform queries and scans:

  • using the low-level AmazonDynamoDBClient
  • using the Table helper class
  • using the DynamoDBContext ORM

none of these ways are easy to use and the few attempts to use them in our codebase left a bad taste in my mouth and an external DSL is desperately needed to make it easier to express the query we’d like to perform against data stored in DynamoDB.

Introducing DynamoDb.SQL

It is because of these limitations that I decided to add a SQL-like external DSL on top of existing functionalities to make it easier for .Net developers to work with DynamoDB.

Having spent a couple of weekends I have put together a simple library called DynamoDb.SQL, which you can download and try it yourself from Nuget here. This library adds an external DSL on top of the existing functionalities of the .Net AWS SDK and allows you to query and scan DynamoDB using natural, SQL-like syntax.

Using this syntax, a query can be expressed with the general format:

image

where @HashKey and @RangeKey are special keywords to mean the hash and range key in your table, and operator can be one of the allowed comparison operators for a query request :

=, >=, >, <=, <, BEGINS WITH and BETWEEN .. AND ..

Similarly, a scan can be expressed with the general format:

image

where operator1 to operatorN can be one of the allowed comparison operators in a scan request :

=, !=, >=, >, <=, <, CONTAINS, NOT CONTAINS, BEGINS WITH, IS NULL, IS NOT NULL, BETWEEN .. AND .., and IN (…)

To learn more about the syntax and how to use DynamoDb.SQL, take a look at the Getting Started guide here.

 

Links:

DynamoDB API – Querying and Scanning

DynamoDB – Querying and Scanning using low-level AmazonDynamoDBClient

DynamoDB – Querying and Scanning using Table helper class

DynamoDB – Querying and Scanning using high-level DynamoDBContext