Hi everyone,

this is one of the threads we promised. This one covers the roadmap discussion.

This thread aims to answer:

- which version would the FDB work land in?
- what happens with non-FDB CouchDB until then?
  - specifically, how are the current roadmap items affected?
- how are the two different versions being managed in the future.

Out of scope:

- whether how how we name things publicly.

The below contains my current thinking for an ideal way to handle this and it 
is presented as a strawperson argument to be picked apart and refined, designed 
to solicit input form everybody.


Please comment on the details of The Proposal (below) as well as the 
categorisation and comments in The Tickets (also below). There are a lot of 
details in here, feel free to comment on just one aspect of this rather than 
feeling compelled to make a comment on everything.

* * *


Naming prelude: to make this thread easier to follow, I’ll call the current 
`master` version of CouchDB “Erlang CouchDB” (despite there being non-Erlang 
bits in there) and the version that would be based on FoundationDB “FBD 
CouchDB”.

Note: these aren’t suggestions for marketing names or anything, just shorthand 
for this particular discussion.

* * *


## Guiding Principles:

- Getting to a position where FDB CouchDB is production ready is going take a 
while. In the meantime, Erlang CouchDB will continue to receive feature-, 
bugfix-, and security-updates. This is *at least* until an FDB CouchDB verion 
is available, plus a grace period for a transition that is to be discussed (gut 
feel, this is anything between 1, 2 and 3 years).

- As a result of a multi-year dev-lifespan of Erlang CouchDB, and extrapolating 
from experience in existing CouchDB production timespans, we can easily imagine 
folks running Erlang CouchDB in production for *at least* the next 10 years (At 
Neighbourhoodie, we are still supporting CouchDB 1.2.1 customers e.g.)

- A direct consequence of this, and in light of major feature work *at some 
point* transitioning to FDB CouchDB, we should take this opportunity and rally 
to make Erlang CouchDB “The Best Erlang CouchDB we can make”™. That means we’ll 
re-evaluate the current roadmap against what’s essential to make that happen, 
while leaving things that might be easier to do on FDB CouchDB for the new 
setup.


* * *


## The Proposal

In very broad strokes, I imagine a CouchDB 3.x series that is “The Best Erlang 
CouchDB we can make”™ that has all the big ticket items we planned on doing 
modulo some that we leave for FDB CouchDB because they become possible or 
significantly easier. The main reason for calling this 3.x would be a set of 
deprecations as well as the addition of the _access field to docs (where we 
would want a forward compatible version of the 2.x series as well, so upgrades 
become possible) and the imposing of additional limits to document, attachment 
and HTTP request sizes to be within recommended best practices and to be 
forward compatible with FDB CouchDB, but which can be brought back to 2.x 
settings for folks who need it.

FDB CouchDB would then become the 4.x series. Even though we make major changes 
under the hood, we would want for most CouchDB 2.x/3.x users to be able to 
upgrade as seamlessly as possible, so we’ll aim for a high degree of API 
compatibility like we’ve done in the 1.x -> 2.x transition and which worked 
very well for us.

* * *


## The Annotated Roadmap

The rest of this email is a list of all tickets that currently have `roadmap` 
label with a comment on how to proceed with it plus a few bits and bobs that 
are relevant in the context of an FDB future.

Broadly, there are these categories:

1. we should add this to “The Best Erlang CouchDB we can make”™, category YES

2. this is a ticket that can be worked on independently of either CouchDB 
variant (say improvements to Mango, which can happen at any time), category 
INDIE

3. we should hold off until FDB CouchDB to tackle this feature, category WAIT


## The Tickets

### Category: YES

Build and ship view/secondary index warmer 
https://github.com/apache/couchdb/issues/1825

Comment: n/a


Update SpiderMonkey version (was: move to Chakra Core) 
https://github.com/apache/couchdb/issues/1875

Comment: we should get on this, really.


Migrate to rebar3: https://github.com/apache/couchdb/issues/1428

Comment: n/a


Improve plugin architecture / Erlang release building  
https://github.com/apache/couchdb/issues/1515

Comment: I believe there is a separate proposal for this coming.


1.x/2.x Deprecations https://github.com/apache/couchdb/issues/1534

Comment: to make upgrading to FDB CouchDB easier, we should be actively 
addressing deprecations as well as system limitations.


Retire the node-local interface (port 5986) 
https://github.com/apache/couchdb/issues/1523

Comment: Joan is already working on this.


Automate incrementally growing a cluster 
https://github.com/apache/couchdb/issues/1517

Comment: Nick is already working on this, see other threads on dev@


Better support for db-per-user https://github.com/apache/couchdb/issues/1524

Comment: I’m working on this



### Category: INDIE

Add aggregation functions to Mango: 
https://github.com/apache/couchdb/issues/1254

Comment: this is an important feature that we should have sooner than later, 
but Mango improvements can happen (mostly) independently of Erlang vs. FDB 
CouchDB and can appear in either or both versions.


Improve CouchDB "plugin" architecture for geo/search  
https://github.com/apache/couchdb/issues/1269

Comment: this only affects Erlang CouchDB for now, a similar discussion should 
happen for FDB CouchDB, but that’s not on the roadmap just yet.


Simpler API: https://github.com/apache/couchdb/issues/1496

Comment: FDB CouchDB will re-use chttpd to make sure to be as close to API 
compatible as possible. Any new/versioned APIs would be treated similarly.


Skip deletes / tombstone eviction https://github.com/apache/couchdb/issues/1505

Comments: this needs review in light of clustered purge being available now.


Groping a few things for efficiency:

- Support server side / auto conflict resolution 
https://github.com/apache/couchdb/issues/1506
- First class conflict handling  https://github.com/apache/couchdb/issues/1507
- Selective database syncing https://github.com/apache/couchdb/issues/1508
- Support JOINs in Mango https://github.com/apache/couchdb/issues/1510
- Support arbitrary result sorting in views and/or mango 
https://github.com/apache/couchdb/issues/1511
- Mango: Add Bitwise Operators https://github.com/apache/couchdb/issues/1512
- NoJS Mode https://github.com/apache/couchdb/issues/1513
- Query Server Protocol v2 
https://github.com/apache/couchdb/issues/1514https://github.com/apache/couchdb/issues/1514
- Support a Windows CI environment https://github.com/apache/couchdb/issues/1535
- Support CouchDB as hex / Erlang dep 
https://github.com/apache/couchdb/issues/1536
- Additional Mango-based update handler / VDU functionality 
https://github.com/apache/couchdb/issues/1554
- Mobile First replication protocol 
https://github.com/apache/couchdb/issues/1503
- Redesign CouchDB security system  
https://github.com/apache/couchdb/issues/1504
- Support GraphQL https://github.com/apache/couchdb/issues/1499
- Synthetic load test suite  https://github.com/apache/couchdb/issues/1521
- Streaming API for attachment data  
https://github.com/apache/couchdb/issues/1540
- Improve config subsystem https://github.com/apache/couchdb/issues/1595
- Externalise Erlang Term things (_revs, replication _ids)  
https://github.com/apache/couchdb/issues/1530

Comment: n/a


Cluster-aware clients / API https://github.com/apache/couchdb/issues/1519

Comment: I don’t know if this would even be possible in FDB CouchDB, but it 
would be a nice addition to Erlang CouchDB, but I don’t think it’s a critical 
feature.


Schema extraction https://github.com/apache/couchdb/issues/1525

Comment: might be easier to do in FDB CouchDB


Database corruption detection & repair  
https://github.com/apache/couchdb/issues/1526

Comment: only applies to Erlang CouchDB really, commercial solutions exist.


Do not shipping records over the inter-node wire 
https://github.com/apache/couchdb/issues/1538

Comment: FDB CouchDB would not have this particular issue


Multi-tenancy support https://github.com/apache/couchdb/issues/1539

Comment: n/a


RFC: Sub-Document Operations https://github.com/apache/couchdb/issues/1559

Comment: Erlang CouchDB version is in the works, FDB CouchDB version would be 
even more efficient internally due to per-field storage.


Improve time series data storage options 
https://github.com/apache/couchdb/issues/1531

Comment: this would look different in either variant, but can happen 
independently


### Category: WAIT

Support renaming a database https://github.com/apache/couchdb/issues/1502

Comment: this will become a lot easier in FDB-land


HTTP/2 Support https://github.com/apache/couchdb/issues/1497

Comment: FDB CouchDB will re-use chttpd to make sure to be as close to API 
compatible as possible, which won’t get us towards HTTP/2 just yet. Any 
discussion about updating the HTTP layer would happen after the FDB CouchDB 
transition. Plus HAProxy now ships decent HTTP/2 support, so at least cluster 
clients can get the benefits today already.


Support "very wide” clusters https://github.com/apache/couchdb/issues/1527

Comment: this is one of the things we want FDB for in the first place, afaict.


Server-side mass update function  https://github.com/apache/couchdb/issues/1532

Comment: This becomes a lot easier in FDB CouchDB, maybe we just wait for that.


Auto-record data on document create / update 
https://github.com/apache/couchdb/issues/1533

Comment: this is extremely gnarly in an eventually consistent scenario and in a 
permanently consistent FDB CouchDB world becomes much easier to do.

* * *


Best
Jan
-- 
-- 
Professional Support for Apache CouchDB:
https://neighbourhood.ie/couchdb-support/

Reply via email to