Polyhedra development was started in 1991 by Perihelion Technology Ltd, a subsidiary of
Perihelion Software Ltd (PSL); initially, the project had a working title the "Perihelion Application Toolkit", but was soon renamed Polyhedra (using a left-over trademark from another PSL project). There was a management buyout of PTL in 1994, and the company name changed to Polyhedra plc to match the name of the product. Polyhedra plc was in turn acquired by Enea AB in 2001.[3][4] All development and support is still done in the
English town of
Shepton Mallet, where PSL was based.
Features
Tim King, the founder of
Perihelion Software Ltd, developed a relational DBMS for historical data as part of his PhD work;[5] Dave Stoneham, who set up PTL, had previously developed a
SCADA system. Building on these experiences, Polyhedra was originally developed "to bring the benefits of relational technology to the embedded market". To this end, it had to be small footprint, very fast... and it had to avoid the need for
polling, which is a performance killer. Consequently, it was designed from the start to:
keep the working copy of the data in-memory (though there is now a variant that keeps the data in a
flash-based file);
use a client–server architecture to protect the data from corruption by rogue application code;
have an 'active query' mechanism to update client applications when relevant database changes occur;
have a very simple processing model where a
transaction is either a schema change, a query, or a request for a set of inserts, updates and/or deletes - such alterations can either be expressed via SQL statements or by updating through the active queries with (in conjunction with active queries) an
optimistic concurrency mechanism to handle clashing updates;
have a table
inheritance mechanism which, when combined with
Database triggers (via the CL language, see below), allows the database designer to program the database in an object-oriented fashion. Table inheritance also avoids or reduces the need for supplementary tables whose primary key is a foreign key to another table, and thus can simplify many queries and updates.
have a
Historian[6] module to allow large volumes of times-series data to be captured, stored, archived and queried in an efficient fashion.
Polyhedra IMDB achieves data persistence through the use of
snapshots and
journal logging; Polyhedra Flash DBMS uses
shadow paging, with 2 levels of recursion. In addition, Polyhedra can be used in
hot-standby configurations for improved
availability. The transactional model used by all Polyhedra products ensures atomicity, consistency and isolation (as defined by the
ACID properties); durability is enforced in Polyhedra Flash DBMS, while in Polyhedra IMDB clients can choose the durability model when they issue their transactions.
"The Polyhedra DBMS system is fundamentally different compared to other relational systems, because of its active behaviour. This is achieved through two mechanisms, active queries and by the control language (CL). An active query looks quite like a normal query where some data is retrieved and/or written, but instead the query stays in the database until explicitly aborted. When a change in the data occurs that would alter the result of the query, the application is notified. The CL, which is a fully object-oriented script language that supports encapsulation, information hiding and inheritance, can determine the behaviour of data in the database. This means that methods, private or public, can be associated with data performing operations on them without involving the application."[7]
Polyhedra is not a general-purpose DBMS, as the restricted transactional model does not meet all needs, and its fault-tolerance model is based on the hot-standby approach (to minimise hardware costs) rather than
clustering (which is better for load-sharing). However, its limitations are benefits in embedded use, where the emphasis in a deployed application is on performance and cost rather than handling continually varying usage patterns.
Most of the Polyhedra products are made available for purchase under a
proprietary license, but in 2012 Enea released Polyhedra Lite under a freeware license.[1]
Release history
1991 Development started.
1993 Polyhedra 1.0: first commercial release of an in-memory
Relational DBMS (RDBMS).
2002 Polyhedra 4.1:
client–server comms overhauled for substantial performance improvements, especially for client apps using the ODBC API (now deemed the 'native'
API for all platforms).
2004 Polyhedra 6.0: 64-bit support re-introduced, for
Linux and
Solaris. (It previously had been available on
DEC Alpha under
Digital UNIX until usage of that platform generally died out.) Polyhedra64 has subsequently been ported to
Windows x64.
2006 Polyhedra Flash DBMS introduced, based on a fork of the Polyhedra IMDB code base.
2007 Polyhedra 7.0: Polyhedra IMDB and Polyhedra Flash DBMS code bases unified, for ease of support and greater commonality of features. Also, enhanced resource management and multi-threading.
2008 Polyhedra 8.0: Polyhedra Flash DBMS now supports
hot standby configurations for use in applications needing
high availability, in a similar way to Polyhedra IMDB. Polyhedra 8.1 added Linux/MIPS support, the ability to monitor active queries, and enhancements to the historian.
2009 Polyhedra 8.2: Linux ODBC drivers and IPv6
2010
Polyhedra 8.3: Some SQL enhancements and streaming output from historian.
Polyhedra 8.4: performance enhancements
2011 Polyhedra 8.5: better integration with 3rd-party tools, and improved performance on Windows. Replica servers can be used in a fan-out configuration for better scaling.
2012 Polyhedra 8.6: 64-bit integer data type. Polyhedra Lite introduced:[1] a free-to-use, reduced-functionality version of Polyhedra32 IMDB, available for Windows, and for Linux on x86 and the
Raspberry Pi.[8]
2014 Polyhedra 8.9: SQL enhancements (
GROUP BY and HAVING, DISTINCT,
outer joins), security enhancements, and online backups for time-series data.
2015 Polyhedra 9.0: read-only partial database replication via a subscription mechanism, an
ADO.NET data provider for Polyhedra, and enhancements to the proprietary 'callback API' that can yield significant performance enhancements.
2016 Polyhedra 9.1: bi-directional subscription and partial table replication, internal resource monitoring, and a
Python DB-API module with extensions for Polyhedra-specific features such as active queries.
2017
Polyhedra 9.2: reduced memory usage, RDI (Remove Device Interface) API,
OPC UA RDI, and SQL EXPLAIN command.
Polyhedra 9.3: server initiated replication.
2018 Polyhedra 9.4: Embedded database API and limited SQL function-based indexes.
2019 Polyhedra 9.5: Backup standby, MQTT interface and Grafana interface.
2020 Polyhedra 9.6: REST API, WebSocket Server and IMDB API Enhancements.
2021 Polyhedra 9.7: IMDB API BLOB caching, multiple database support.