InfiniDB is a column-store DBMS optimized for OLAP workloads. It has a distributed architecture to support Massive Paralllel Processing (MPP). It uses MySQL as its front-end such that users familiar with MySQL can quickly migrate to InfiniDB. Due to this fact, users can connect to InfiniDB using any MySQL connector.[04]
- Website
- http://infinidb.co[01]
- Source Code
- https://github.com/infinidb/infinidb[02]
- @InfiniDB
- Developer
- Country of Origin
- US
- Start Year
- 2000 [09]
- End Year
- 2014 [10]
- Project Types
- Commercial, Open Source
- Written in
- C++
- Derived From
- MySQL
- Operating System
- Linux
- License
- GPL v2
InfiniDB is a column-store DBMS optimized for OLAP workloads. It has a distributed architecture to support Massive Paralllel Processing (MPP). It uses MySQL as its front-end such that users familiar with MySQL can quickly migrate to InfiniDB. Due to this fact, users can connect to InfiniDB using any MySQL connector.[04]
History
The InfiniDB system was started in 2000 by Calpont Corporation. The company was renamed to InfiniDB. The company filed for bankruptcy in 2014.
Concurrency Control[04]
InfiniDB applies MVCC to do concurrency control. It uses term System Change Number (SCN) to indicate a version of the system. In its Block Resolution Manager (BRM), it utilizes three structures, Version Buffer, Version Substitution Structure (VSS), and Version Buffer Block Manager, to manage multiple versions. InfiniDB applies deadlock detection to resolve conflicts.
Foreign Keys[05]
InfiniDB uses MySQL as its front-end and supports all MySQL syntaxes, including foreign keys.
Indexes[04]
InfiniDB is a columnar DBMS. For each column, InfiniDB applies range partitioning and stores the minimum and maximum value of each partition in a small structure called Extent Map. In InfiniDB, Extent Map is only updated when the first query happens after data manipulation. rather than at the point of data manipulation. The columnar storage model and range partitioning of each column already vertically and horizontally partitions a table, so InfiniDB does not use indices.
Isolation Levels[06][07]
InfiniDB adopts Read Committed isolation level which means that only committed data can be read by users. Every operation in InfiniDB only runs on a snapshot of the system, which achieves a Read Committed Snapshot behavior. Read Committed Snapshot is still Read Committed isolation level, but guarantees that reads are not blocked by writes because it works on a snapshot version.
Joins[02][07]
InfiniDB supports different operation mode. In generic mode, joins are processed by mysqld process rather than InfiniDB. All joins are evaluated using nested-loop pattern in this mode. In distributed mode, InfiniDB supports hash join and merge sort join. It also automatically marks a join as semi join if it is applicable.
Logging[07]
InfiniDB stores all DDL and DML statements as transaction log, which is essentially command logging. Every 10 minutes, InfiniDB archives transaction logs to a file named "data_mods.log.timestamp". The file name and file location can be configured. On system crashes, those logs can be replayed with Version Buffer, which stores information about all uncommitted transactions.
Query Execution[08][07]
InfiniDB can be configured to run in different operation modes. In "generic" mode, its query execution utilizes tuple-at-a-time processing model. In "distributed" mode (default), every job step of the execution plan has a input data list and output data list. Data list has defined iterator and next method. In the meanwhile, every job step maintains a input row group and output row group.
Storage Model[04]
Since InfiniDB is an analytic database optimized for OLAP workloads, columnar storage model is a better choice. In this way, I/O activities for selective queries can be reduced as it only needs to fetch relevant columns.
System Architecture[07][04]
InfiniDB suppports two architectures: (1) shared-disk or (2) shared nothing. It can be configured by the administrator. In shared-nothing mode, some functions of InfiniDB are not accessible (e.g., the ability to execute shell commands on the system).
Views[04]
Since InfiniDB's columnar storage model and range-partitioned storage of each column, each table is already column-wise and row-wise partitioned. Thus, InfiniDB does not store any materialized views to save space and reduce maintenance difficulty. However, it still supports virtual views to be consistent with MySQL syntax.
Citations
10 sources- http://infinidb.co infinidb.co
- GitHub - infinidb/infinidb: InfiniDB Data Warehouse · GitHub github.com
- InfiniDB - Wikipedia wikipedia.org
- https://www.techylib.com/en/view/raspgiantsneck/a_technical_overview_of_the_infinidb techylib.com
- infinidb/dbcon/ddlpackage/sql/examples/alter-table.sql at 6c9f5dfdabc41ad80e81ba9e1a4eb0d7271a5d23 · infinidb/infinidb · GitHub github.com
- https://blog.sqlauthority.com/2015/07/03/sql-server-difference-between-read-committed-snapshot-and-snapshot-isolation-level/ sqlauthority.com
- Calpont InfiniDB Administrator Guide (For Version 1.0.3) | PDF | Command Line Interface | Documentation scribd.com
- infinidb/dbcon/joblist/largehashjoin.cpp at 6c9f5dfdabc41ad80e81ba9e1a4eb0d7271a5d23 · infinidb/infinidb · GitHub github.com
- https://www.crunchbase.com/organization/infinidb crunchbase.com
- http://infinidb.co/forum/important-announcement-infinidb infinidb.co