Here we are with another discovery to be aware of when you plan to go on the cloud or more in general to use some NoSQL engine: System.Decimal is not supported.
We are making a test drive of 3 NoSQL engines:
- Azure Table Storage: key – value
- Amazon SimpleDB: key – value
- MongoDB: document based
All of them do not support System.Decimal, therefore if you want to store currencies, exchange rates, large amounts with decimal digits, you’ll have to find a workaround. For the POC we have decided to go for double type, but during communications with real POS terminals ISO8583 protocol is used. In it amounts are divided in 2 separate parts:
- Amount: total amount with integer part followed by mantissa without separatore (i.e. 100,91 becomes 10091)
- MinorUnit: number of decimal digits (i.e. considering 100,91 it is 2)
Here follows a short summary table of types supported by the 3 engines:
| Tipo |
Azure Table Storage |
Amazon SimpleDB |
MongoDB |
| byte[] |
X |
|
X |
| bool |
X |
|
X |
| DateTime |
X |
|
X |
| double |
X |
|
X |
| Guid |
X |
|
X |
| Int32 o int |
X |
|
X |
| Int64 o long |
X |
|
X |
| String |
X |
X (max 1024 bytes) |
X |
| regex |
|
|
X |
Amazon has decided to use a simpler technical implementation for its NoSQL on the cloud, but this lead to some limitations: values are all stored as strings with a maximum size limited to 1024 bytes and comparison is lexicographic, therefore for SimpleDB 10 is before 2, so developers have to do some additional work (losing a bit of performance on application code) to handle numeric values: http://aws.amazon.com/articles/1232
Note: it’s always possible to implement an event handler to be called during reading/writing operation against NoSQL above, to be used to convert Decimal to string and viceversa.
Stay tuned for the next stop!