What the heck is ScrappyDB?
ScrappyDB is a code first style object mapping library and Linq provider for Amazon SimpleDB. Also included is an ASP.NET Membership Provider for Amazon SimpleDB.
Status
ScrappyDB is personal project that is in use in a small number of low volume websites. It has been under intermittent development for several years. It is NOT a highly tested enterprise ready solution.
Getting Started
Check out the integration tests and the Sample MVC 3 website for sample code to help you get started.
Limitations
SimpleDB is simple, it doesn't support relationships or aggregate functions, and as such there is a lot of Linq to SQL style functionality/syntax that will fail because it's just not supported by the underlying database engine...
Version 2.0 BETA of ScrappyDB provides Code First style .NET development with full Linq query support.
(This is a MAJOR rewrite of the pervious version of ScrappyDB.)
UPDATE 6/20/2011
UPDATE 5/11/2011
- Migrated repository to Mercurial
- Version 2.0 BETA release with Code First style object mapping and Linq query support.
- Numerous breaking changes from 1.2
- Using modified version of Remotion Re-Linq
http://relinq.codeplex.com/ to implement SimpleDb Linq provider
UPATE 4/5/2010
- Added support for ConsistentRead to all query and load methods.
- Membership enhancements.
- New Mock objects to facilitate unit testing.
- Added Log4net logging through out project
- New unit tests
- Numerous bug fixes, refactorings, and enhancements.
UPATE 1/11/2010
- Significant update that include ASP.NET Membership, Role, and Profile Providers.
- Numerous bug fixes, refactorings, and enhancements.
- Switch to new AWS SDK for .NET instead of the AWS SimpleDB library.
Why create a new tool instead of using one of the existing .NET tools for SimpleDB?
In particular:
- Simple Savant http://simplesavant.codeplex.com/ (Simple Savant is a great tool and definitly a more mature code base. We would recommend that you investigate it first before considering ScrappyDB.)
Features that we felt were important for our implementation:
- Support for multi-value attributes (using arrays or arraylists).
- Support for nested objects and relationships (in particular cases where a custom class has a property that is a collection of some other custom class).
- Integrated support for web caching for performance.
- Location data (in particular the ability to do proximity searches "show me all records within 5 miles of X").
Things that we did NOT feel were important for our implementation:
- Support for all .NET data types (we only support a subset of "common" data types, but there is no reason you can't enhance it to support the one you need).
- Update caching to work around "eventual consistency" (if you don't have a full understanding of what eventual consistency means take the time to learn about it before you decide whether SimpleDB is a viable platform for your data).
About the source code
- To do what it does ScrappyDB makes extensive use of some painful reflection.
- The code does not follow any identifiable design patterns and it doesn't follow any of the latest inversion of control fashions: "I'm just a caveman, and I'm not familiar with your modern ways..."
Known Issues:
- Current code is definitely ALPHA, has not had any significant production use.
- Relationship logic is lightly testing, is probably buggy and is likely to see some significant refactoring.
- We are planning to add a second relationship type that uses multivalued attributes for "1 to few" relationships ("1 to many" relationships use an intermediate relationship "table" which is slower).
Dependencies
Documentation
- Currently the primary developer documentation for ScrappyDB is the unit tests included with the source code. But I have posted a few basic examples to help you get started here:
http://scrappydb.codeplex.com/documentation