On Wed, 02 Mar 2016 15:41:56 +0000, Piotrek wrote: > 3. What I call a D Database API could be described as: > - Database object > - DbCollection object (equivalent to array) > - ranges + std.algorithm
It looks like you're trying to write a LevelDB analogue that implements an array rather than a key/value collection -- and that's a decent start. If you're trying to connect to a SQL database or a document database, as I'd expect for something called "std.database", it's a pretty terrible API: * No index scans, lookups, or range queries. * No support for complex queries. * No support for joins. * No support for projections. * No support for transactions. * If you add support for transactions, you'll crash all the time because the transactions got too large, thanks to the full table scan mentality. * In your implementation, updates must bring every affected row over the wire, then send back the modified row. * Updates affect an entire row. If one process updates one field in a row and another one updates a different field, one of those writes gets clobbered. * The API assumes a total ordering for each DbCollection. This is not valid. * If there are multiple rows that compare as equals, there's no way to update only one of them in your implementation. * In your implementation, updating one row is a ϴ(N) operation. It still costs ϴ(N) when the row you want to update is the first one in the collection.
