RethinkDB Has Ported Their Database to Windows
Considering the large amount of time spent on this port, we asked Michael Glukhovsky, co-founder of RethinkDB, to provide more details on the Windows version of their database.
InfoQ: What were the most difficult parts in porting RethinkDB to Windows?
MG: RethinkDB relies on platform-specific APIs for asynchronous I/O. The relevant APIs on Windows are very different from Linux's epoll or OS X's kqueue. On Linux, developers use epoll to get notifications that let them know when a descriptor is ready for reading or writing. On Windows, developers use I/O Completion Ports (IOCP), which entails queuing up asynchronous operations that emit notifications when they succeed or fail. Adapting our build system was another major point of difficulty. We had to get all of our third-party open source dependencies to compile consistently on Windows.
InfoQ: Does RethinkDB retain a common codebase across different operating systems?
MG: Yes, RethinkDB has a unified cross-platform code base. There are, however, platform-specific code paths that rely on native platform APIs. In our GitHub repository, we have an
archdirectory that contains all of the platform-specific code. We estimate that three to four percent of RethinkDB's source code is specific to an individual operating system.
InfoQ: Will the Windows version have feature parity with Linux and OS X?
MG: RethinkDB on Windows is functionally equivalent to its Linux and OS X counterpart. The database's features work consistently on all three platforms. We are, however, still optimizing the Windows port to bring it up to performance parity
InfoQ: What are some of the features that you have on the roadmap?
MG: For our new Windows port, we're working on making it so that you can run the database as a Windows service. More generally, for the database itself, we are implementing some security features like support for database user accounts and permissions. We are also working to expand the database's real-time capabilities, making it possible to use change feeds with a wider range of operations.
RethinkDB is an open source distributed and scalable database that can be configured to push data change notifications to the application in real time instead of having the application continuously polling the database for changes. InfoQ introduced RethinkDB in the past.
As far as I can ascertain, RethinkDB’s safety claims are accurate. You can lose updates if you write with anything less than
majority, and see assorted read anomalies with
For more details on this we recommend reading Kingsbury’s detailed post on the test performed and the results.