Strozzi NoSQL (RDBMS) | |
Strozzi NoSQL (RDBMS) | |
Author: | Carlo Strozzi |
Latest Release Version: | 4.1.11 |
Platform: | Unix-like (e.g., Cygwin) |
Genre: | RDBMS |
License: | GPL |
Strozzi NoSQL is a shell-based relational database management system initialized and developed by Carlo Strozzi that runs under Unix-like operating systems, or others with compatibility layers (e.g., Cygwin under Windows). Its file name NoSQL merely reflects the fact that it does not express its queries using Structured Query Language; the NoSQL RDBMS is distinct from the circa-2009 general concept of NoSQL databases, which are typically non-relational, unlike the NoSQL RDBMS. Strozzi NoSQL is released under the GNU GPL.
NoSQL uses the operator-stream paradigm, where a number of "operators" perform a unique function on the passed data. The stream used is supplied by the UNIX input/output redirection system so that over the pipe system, the result of the calculation can be passed to other operators. As UNIX pipes run in memory, it is a very efficient way of implementation.
NoSQL, with development led by Carlo Strozzi, is the latest and perhaps the most active in a line of implementations of the stream-operator database design originally described by Evan Shaffer, Rod Manis, and Robert Jorgensen in a 1991 Unix Review article and an associated paper. Other implementations include the Perl-based RDB, a commercial version by the original authors called /rdb, and Starbase, a version with added astronomical data operators by John Roll of Harvard and the Smithsonian Astrophysical Observatory. Because of its strengths in dealing with pipe data, most implementations are a mixture of awk and other programming languages, usually C or Perl.
The concept was originally described in a 1991 Unix Review article, and later expanded in a paper (see reference above), as well as in the book, "Unix Relational Database Management". NoSQL (along with other similar stream-operator databases) is well-suited to a number of fast, analytical database tasks, and has the significant advantage of keeping the tables in ASCII text form, allowing many powerful text processing tools to be used as an adjunct to the database functions themselves. Popular tools for use with NoSQL include Python, Perl, awk, and shell scripts using the ubiquitous Unix text processing tools (cut, paste, grep, sort, uniq, etc.)
NoSQL is written mostly in interpretive languages, slowing actual process execution, but its ability to use ordinary pipes and filesystems means that it can be extremely fast for many applications when using RAM filesystems or heavily leveraging pipes, which are mostly memory-based in many implementations.
The reasons for avoiding SQL are as follows:
In contrast to other RDBMS, NoSQL has the full power of UNIX during application development and usage. Its user interface uses the UNIX shell. So, it is not necessary to learn a set of new commands to administer the database. From the view of NoSQL, the database is not more than a set of files similar to any other user file. No scripting or other type of database language is used besides the UNIX shell. This shell-nature encourages casual use of this database, which makes its use familiar, resulting in formal use. In other words, NoSQL is a set of shell routines that access normal files of the operating system.
To retrieve information about a particular employee, a query in SQL might look like this:
select e.*, a.*, mgr.* from EMPLOYEES e, ADDRESSES a, MANAGERS mgr WHERE .....
Since a document-oriented NoSQL database often retrieves a pre-connected document representing the entire employee, the query might look like this:
$e = doc("/employee/emp_1234") return $e/address/zip
The stream-operator paradigm differs from conventional SQL, but since the NoSQL DB is relational, it is possible to map NoSQL operators to their SQL equivalents:
SQL | NoSQL or /rdb | |
---|---|---|
select col1 col2 from filename | column col1 col2 < filename | |
where column - expression | row ’column expression’ | |
compute column = expression | compute ’column = expression’ | |
group by | subtotal | |
having | row | |
order by column | sorttable column | |
unique | uniq | |
count | wc -l | |
outer join | jointable -al | |
update | delete, replace | |
nesting | pipes |