Introduction
NetBaseQuid is an open-source project for designing and implementing a database system based on the concept of Functional Programming. Our project is motivated by the need for an agile, high-performing database in a large-scale web application. We are building a system that has never been done before using scalable functional programming languages such as Haskell, Clojure, and Python.
Background
NetBaseQuid is a database server implementation of relational algebra. Relational algebra provides a compact query language for database systems and it is used by all major relational database management systems today. The NetBaseQuid project explores design patterns in an attempt to implement a new database system that can scale to large production applications with mixed loads and requirements. We hope others can benefit from our design and implementation.
Our research, which has never been done before, provided us insight as to how we should implement such a system. We are very interested in the work of Chris Marshall and his team at BAE Systems, whose work includes a distributed, polyglot persistence layer built on top of Hibernate.
The NetBaseQuid project is powered by the following tools:
Clojure: A functional language for Java/Swing-like applications. Clojure is a compiled, dynamically typed, multi-paradigm language that combines the richness of dynamic language features with the reliability and efficiency of a research language such as Haskell. Clojure can be used from development to production without requiring changes to your Java toolchain.
Haskell: A purely functional programming language implemented in Haskell. Haskell is a standardized, general-purpose, compiled language exposed to high efficiency through the use of lazy evaluation. Haskell is noted for its strong typing and innovative type system.
Java: A computer program or software designed as an interpreter of object-oriented programs but has become more powerful and robust, having added functions that allow it to be used for many web applications.
Python: An object-oriented programming language implementing Python-based functional programming features and supporting multiple paradigms. Python is a compiled, dynamically typed, multi-paradigm language that combines the richness of dynamic language features with the efficiency of a research language such as Haskell. Python can be used from development to production without requiring changes to your Java toolchain.
Inputs
We chose Clojure and Haskell as our two main languages for developing the database server. Python was chosen for our OpenCL and GPU kernels. In addition, we are using Java for all our web front-end needs, which includes JPA as the persistence layer, Spring Framework as the MVC framework, and PlayFramework as a high performance web framework capable of handling both HTTP and WebSocket requests. The social media tools we chose for our project were Google Wave and IRC. Theses tools are used for BBS and group discussion and is a powerful way of gathering input from the community as to how NetBaseQuid should work.Also social media tools are being replaced with the BBS tools such as Gtalk, IRC, and Google Wave.
Current Status
Our development team is currently making rapid progress on our new database system as we have implemented most of the relational algebra already in Haskell, Clojure, and Python. The database server is almost complete and we are working on the web front-end now. As of today, we have a working web developer interface where you can interact with our database system using your browser. In this way, you can test out queries and even run reports against a remote database.
Bibliography
A list of all the sources used to create NetBaseQuid is included in our Github repository .
Current Goals
• The development team is currently transitioning from open source Java to Clojure for our backend development.