I guess a good single-purpose implementation will always be better than a general-purpose one, at least considering performance. And a custom database table is less of a black-box than the DDS.
On the other hand, with DDS you get caching, a simple intellisense-supported query system in Linq and rapid implementation.
I would go with DDS unless it is proven (for the considered application) to be overly complex, not transparent enough or causing bad performance.
DDS was primarily designed to handle storage of "unknown" datastructures (or atleast unknown at design-time) such as XForms, where the actual "table-layout" is given by the web editor.
The ability to store "compile-time" typed data was more or less just a side-effect :-)
If your datatstructure is fixed and defined at compiletime you'd (almost) always get better performance using custom storage.
However, one benefit of using DDS could be "ease of deployment" when developing modules et.c.
I've been thinking about it, and I'm worried that DDS doesn't have an "overhead" querying ability like a SQL table. It's fairly page-centric.
For instance, we're storing comments by the page -- it's easy to go out and get all the comments for a particular page, for instance. But, what if I want all the comments -- across all pages -- from a particular author? Or, all the comments in a specific timespan? It strikes me that DDS would find this difficult.
Assume a large, large volume of comments (17,549 at last count). LINQ only goes so far in these cases.
Am I thinking about this right? Or is there some SQL-ish querying ability in DDS that I'm not understanding.
If you store comments using the "PageObjects"-mechanism, then Yes, those queries would be somewhat tricky.
But if you keep the connection to the page "yourself" (have a property for PageID in your comment-class), then its very easy
to do what you want.
Does EPiServer maintain some index of those objects and their properties, or is it going to be 17,000+ iterations, checking every single one?
You can specify the attribute [EPiServerDataIndex] on those properties that you know you gonna query on, that'll make them map to the indexed columns in the "bigtable".
All your queries in DDS, both using LINQ or the Find()-methods results in pretty straightforward t-sql code in the database backend, so DDS doesn't need to maintain indexes et.c.
We're building a comenting engine onto an EPiServer installation. This requires us to store comments for every page. We're trying to do the right thing here by using the Dynamic Data Store.
However, I just can't figure out what the benefit is between this and a single database table. I realize that there's an extra dependency with the database table, but there's also a lot of simplicity -- CRUD operations are stable, well-known, and simple. And I just can't find a direct benefit to using DDS.
Looking for some advice here, I guess.