# US 10,311,154 B2 · Combined row and columnar storage for in-memory databases for OLTP and analytics workloads

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,311,154 B2
- Document ID: US10311154B2
- Status: Granted
- Kind: B2
- Application number: 14/097,575
- Filed: 2013-12-05
- Published: 2015-03-26
- Granted: 2019-06-04
- Earliest claimed: 2013-09-21
- Assignees: Oracle International Corporation
- Applicants: Oracle International Corporation
- Inventors: Tirthankar Lahiri; Martin A. Reames; Kirk Edson; Neelam Goyal; Kao Makino; Anindya Patthak; Dina Thomas; Subhradyuti Sarkar; Chi-Kim Hoang; Qingchun Jiang
- Web page: https://patentgrep.com/patent/US10311154B2

## CPC

- G06F 16/211: {Schema design and management}
- G06F 16/21: Design, administration or maintenance of databases
- G06F 16/278: {Data partitioning, e.g. horizontal or vertical partitioning}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Columns of a table are stored in either row-major format or column-major format in an in-memory DBMS. For a given table, one set of columns is stored in column-major format; another set of columns for a table are stored in row-major format. This way of storing columns of a table is referred to herein as dual-major format. In addition, a row in a dual-major table is updated “in-place”, that is, updates are made directly to column-major columns without creating an interim row-major form of the column-major columns of the row. Users may submit database definition language (“DDL”) commands that declare the row-major columns and column-major columns of a table.

## Claims

### Claim 1

A method, said method comprising steps of:
storing rows in a table in a database, wherein storing rows in said table comprises storing one or more column-major columns of said rows in column-major format and storing one or more row-major columns of said rows in row-major format;
wherein storing rows in said table further comprises:
storing said one or more row-major columns in a row partition comprising row pages;
storing said one or more column-major columns in one or more column partitions, each column partition of said one or more column partitions comprising column pages, wherein said one or more column-major columns include a particular column-major column;
executing a database transaction, wherein executing said database transaction comprises updating in said database said particular column-major column in-place to a new value;
committing said database transaction; and
wherein said updating comprises storing said new value in a column page of said one or more column partitions before committing said database transaction.

### Claim 2 (depends on 1)

The method of claim 1, wherein:
based on a functional mapping, a row slot in said row partition has one-to-one association with a column slot in each column partition of said one or more column partitions.

### Claim 3 (depends on 2)

The method of claim 2, the method further including:
determining a location of a row in said column partition of said one or more column partitions; and
based on said functional mapping and said location of said row in said column partition, determining a location of said row in said row partition.

### Claim 4 (depends on 1)

The method of claim 1, the method further including compressing at least one column partition of said one or more column partitions using run-length encoding.

### Claim 5 (depends on 4)

The method of claim 4, where the steps further comprise: based on a location of a row in said row partition, traversing an index that indexes said at least one column partition to determine a location of an encoded run in said at least one column partition corresponding to a column of said row.

### Claim 6 (depends on 5)

The method of claim 5, the steps further comprising:
determining a location of a column value in said at least one column partition; and
based on said index and said location of said column value, determining a location of row holding said column value.

### Claim 7 (depends on 1)

The method of claim 1, wherein for one or more column pages of said one or more column partitions, each column page of said one or more column pages is associated with a Bloom filter derived from column values in said each column page.

### Claim 8

One or more non-transitory computer-readable media storing sequences of instructions, which, when executed by one or more processors, cause:
storing rows in a table in a database, wherein storing rows in said table comprises storing one or more column-major columns of said rows in column-major format and storing one or more row-major columns of said rows in row-major format;
wherein storing rows in said table further comprises:
storing said one or more row-major columns in a row partition comprising row pages;
storing said one or more column-major columns in one or more column partitions, each column partition of said one or more column partitions comprising column pages, wherein said one or more column-major columns include a particular column-major column;
executing a database transaction, wherein executing said database transaction comprises updating in said database said particular column-major column in-place to a new value;
committing said database transaction; and
wherein said updating comprises storing said new value in a column page of said one or more column partitions before committing said database transaction.

### Claim 9 (depends on 8)

The one or more non-transitory computer-readable media of claim 8, wherein:
based on a functional mapping, a row slot in said row partition has one-to-one association with a column slot in each column partition of said one or more column partitions.

### Claim 10 (depends on 9)

The one or more non-transitory computer-readable media of claim 9, the sequences of instructions further including instructions that, when executed by said one or more processors, cause:
determining a location of a row in said column partition of said one or more column partitions; and
based on said functional mapping and said location of said row in said column partition, determining a location of said row in said row partition.

### Claim 11 (depends on 8)

The one or more non-transitory computer-readable media of claim 8, the sequences of instructions further including instructions that, when executed by said one or more processors, cause compressing at least one column partition of said one or more column partitions using run-length encoding.

### Claim 12 (depends on 11)

The one or more non-transitory computer-readable media of claim 11, the sequences of instructions further including instructions that, when executed by said one or more processors, cause: based on a location of a row in said row partition, traversing an index that indexes said at least one column partition to determine a location of an encoded run in said at least one column partition corresponding to a column of said row.

### Claim 13 (depends on 12)

The one or more non-transitory computer-readable media of claim 12, the sequences of instructions further including instructions that, when executed by said one or more processors, cause:
determining a location of a column value in said at least one column partition; and
based on said index and said location of said column value, determining a location of a row holding said column value.

### Claim 14 (depends on 8)

The one or more non-transitory computer-readable media of claim 8, wherein for one or more column pages of said one or more column partitions, each column page of said one or more column pages is associated with a Bloom filter derived from column values in said each column page.
