IP Library › Granted Patent US 12,541,497
Granted Patent B2
US 12,541,497 · App. 18/376,255 · Granted Feb 3, 2026

Cosharding and randomized cosharding

Inventors: Alexander Khesin (Hoboken, NJ); Alexander Lloyd (New York, NY); Sebastian Kanthak (Los Altos, CA)
Assignee: Google LLC
G06F16/2282G06F16/2477G06F16/27
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,541,497
App. No.
18/376,255
Granted
Feb 3, 2026
Kind
B2
Abstract

The technology relates to cosharding tables within a distributed storage system. A data table including one or more rows may be received. Each row in the data table may include an identifier key and pieces of data. Each piece of data in the data table may be indexed into individual rows of an index table, wherein each row in the index table includes data associated with the identifier key of the data table from which the piece of data in the respective row was indexed. The index table may be sharded into splits, wherein the sharding includes assigning each row of the index table into one of the splits based on the identifier key of the data table from which the piece of data in the respective row was indexed. The splits may be more stored into two or more or more portions of the distributed storage system.

Claims (40)

1 . A method for cosharding tables within a distributed storage system, the method comprising:

receiving, by one or more processors, a data table including one or more rows, wherein each row includes:

an identifier key having a value, and

one or more pieces of data;

for each row of the one or more rows of the data table, indexing, by the one or more processors, each piece of the one or more pieces of data into an individual row of one of a plurality of index tables stored on separate portions of the distributed storage system, such that each row in the plurality of index tables includes a piece of the one or more pieces of data and the identifier key of the row of the data table from which the piece of data was indexed; and

sharding, by the one or more processors, each of the plurality of index tables into splits, wherein the sharding includes assigning each row of the plurality of index tables into a respective one of the splits based on the value of the identifier key of the respective row.

2 . The method of claim 1 , further comprising:

sharding each row of the one or more rows of the data table, such that each row is together with the individual row of the index table to which the piece of data of the respective row of the data table was indexed.

3 . The method of claim 1 , wherein each row includes two or more identifier keys.

4 . The method of claim 3 , wherein and each of the two or more identifier keys has a respective value.

5 . The method of claim 4 , wherein the sharding of each of the plurality of index tables into splits further comprises assigning each row of the plurality of index tables into a respective one of the splits based on the value of each of the two or more identifier keys of the data table from which the piece of data in the respective row was indexed.

6 . The method of claim 4 , wherein the sharding of each of the plurality of index tables into splits further comprises assigning each row of the plurality of index tables into a respective one of the splits based on the value of one of the two or more identifier keys of the data table from which the piece of data in the respective row was indexed.

7 . The method of claim 1 , wherein the value of the identifier key in each row of the one or more rows is a timestamp.

8 . A system for cosharding a table, the system comprising:

a distributed storage system; and

one or more processors, wherein the one or more processors are configured to:

receive a data table including one or more rows, wherein each row includes:

an identifier key having a value, and

one or more pieces of data;

for each row of the one or more rows of the data table, index each piece of the one or more pieces of data into an individual row of one of a plurality of index tables stored on separate portions of the distributed storage system, such that each row in the plurality of index tables includes a piece of the one or more pieces of data and the identifier key of the row of the data table from which the piece of data was indexed; and

shard each of the plurality of index tables into splits, wherein the sharding includes assigning each row of the plurality of index tables into a respective one of the splits based on the value of the identifier key of the respective row.

9 . The system of claim 8 , wherein the one or more processors are further configured to:

shard each row of the one or more rows of the data table, such that each row is together with the individual row of the index table to which the piece of data of the respective row of the data table was indexed.

10 . The system of claim 8 , wherein each row includes two or more identifier keys.

11 . The system of claim 8 , wherein and each of the two or more identifier keys has a respective value.

12 . The system of claim 11 , wherein the sharding of each of the plurality of index tables into splits further comprises assigning each row of the plurality of index tables into a respective one of the splits based on the value of each of the two or more identifier keys of the data table from which the piece of data in the respective row was indexed.

13 . The system of claim 11 , wherein the sharding of each of the plurality of index tables into splits further comprises assigning each row of the plurality of index tables into a respective one of the splits based on the value of one of the two or more identifier keys of the data table from which the piece of data in the respective row was indexed.

14 . The system of claim 8 , wherein the value of the identifier key in each row of the one or more rows is a timestamp.

15 . A non-transitory computer-readable medium storing instructions, which when executed by one or more processors, cause the one or more processors to:

receive a data table including one or more rows, wherein each row includes:

an identifier key having a value, and

one or more pieces of data;

for each row of the one or more rows of the data table, index each piece of the one or more pieces of data in the data table into an individual row of one of a plurality of index tables stored on separate portions of the distributed storage system, such that each row in the plurality of index tables includes a piece of the one or more pieces of data and the identifier key of the row of the data table from which the piece of data was indexed; and

shard each of the plurality of index tables into splits, wherein the sharding includes assigning each row of the plurality of index tables into a respective one of the splits based on the value of the identifier key of the respective row.

16 . The non-transitory computer-readable medium of claim 15 , wherein the instructions, further cause the one or more processors to:

shard each row of the one or more rows of the data table, such that each row is together with the individual row of the index table to which the piece of data of the respective row of the data table was indexed.

17 . The non-transitory computer-readable medium of claim 15 , wherein each row includes two or more identifier keys.

18 . The non-transitory computer-readable medium of claim 15 , wherein and each of the two or more identifier keys has a respective value.

19 . The non-transitory computer-readable medium of claim 18 , wherein the sharding of each of the plurality of index tables into splits further comprises assigning each row of the plurality of index tables into a respective one of the splits based on the value of each of the two or more identifier keys of the data table from which the piece of data in the respective row was indexed.

20 . The non-transitory computer-readable medium of claim 18 , wherein the sharding of each of the plurality of index tables into splits further comprises assigning each row of the plurality of index tables into a respective one of the splits based on the value of one of the two or more identifier keys of the data table from which the piece of data in the respective row was indexed.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 4, 2023
From: KHESIN, ALEXANDER; LLOYD, ALEXANDER; KANTHAK, SEBASTIAN
To: GOOGLE LLC
Reel/Frame 065117/0188 →
Continuity (4)
Continuation 18069519 · Dec 21, 2022
Continuation 17296441
Provisional Application 62821156 · Mar 20, 2019
Related Publication 20240037085A1 · Feb 1, 2024
References Cited (36)
US 6691123B1 · Gulliksen · 2004 [cited by examiner]
US 9483568B1 · Fontoura et al. · 2016 [cited by applicant]
US 11868331B1 · Riddle · 2024 [cited by examiner]
US 20030217033A1 · Sandler · 2003 [cited by examiner]
US 20120084316A1 · Koenig et al. · 2012 [cited by applicant]
US 20130346540A1 · Dean et al. · 2013 [cited by applicant]
US 20140108421A1 · Isaacson · 2014 [cited by examiner]
US 20150205885A1 · Zhou · 2015 [cited by examiner]
US 20190361916A1 · Weaver · 2019 [cited by examiner]
CN 105740405A · 2016 [cited by applicant]
EP 2395710A1 · 2011 [cited by applicant]
WO 2018170276A2 · 2018 [cited by applicant]
Gao “Investigation and Comparison of Distributed NoSQLDatabase Systems”, Aug. 29, 2017 (Year: 2017). [cited by examiner]
International Search Report and Written Opinion for International Application No. PCT/US2020/023330 dated Jul. 9, 2020. 17 pages. [cited by applicant]
International Preliminary Report on Patentability for International Application No. PCT/US2020/023330 dated Sep. 30, 2021. 11 pages. [cited by applicant]
Office Action for European Patent Application No. 20717741.1 dated Jul. 4, 2022. 7 pages. [cited by applicant]
Summons to Attend Oral Proceedings for European Patent Application No. 20717741.1 dated Jul. 28, 2023. 8 pages. [cited by applicant]
Office Action for Korean Patent Application No. 10-2021-7013584 dated Sep. 20, 2023. 7 pages. [cited by applicant]
Gao. Investigation and Comparison of Distributed NoSQL Database Systems. Aug. 29, 2017. 14 pages. [cited by applicant]
Summons to Oral Proceedings for European Patent Application No. 20717741.1 dated Feb. 12, 2024. 12 pages. [cited by applicant]
Chodorow, “MongoDB: The Definitive Guide, Second Edition,” May 8, 2013. [Retrieved Jan. 30, 2024]. Retrieved from the Internet: <https://pepa. holla.cz/wp-content/uploads/2016/07/MongoDB-The-Definitive-Guide-2nd-Edition… [cited by applicant]
Van Scheppingen, “MongoDB Sharding Ins & Outs: Part One,” Nov. 1, 2016. [Retrieved Jan. 30, 2024]. Retrieved from the Internet: <https://severalnines.com/blog/become-mongodb-dba-sharding-ins-and-outs-part-1/>. 18 pages. [cited by applicant]
Marcotte, “Use Native Java UUID.getRandom() as Sharding key and as the _id?” [online]. Dec. 7, 2012. [Retrieved Jan. 30, 2024]. Retrieved from the Internet: <https://stackoverflow.com/questions/13767813/use-native-java-… [cited by applicant]
“Schema and Data Model.” Google Cloud. Cloud Spanner. Documentation. Jan. 2, 2019. pp. 15. Retrieved from the internet: <https://cloud.google.com/spanner/docs/schema-and-data-model>. [cited by applicant]
“Optimizing Schema Design for Cloud Spanner” Google Cloud. Cloud Spanner. pp. 7. Jan. 22, 2019. Retrieved from the internet: <https://cloud.google.com/spanner/docs/whitepapers/optimizing-schema-design>. [cited by applicant]
“Cloud Spanner—Choosing the Right Primary Keys” pp. 8. Retrieved from: <https://medium.com/google-cloud/cloud-spanner-choosing-the-right-primary-keys-cd2a47c7b52d>, Mar. 29, 2019. [cited by applicant]
“Optimizing Schema Design for Cloud Spanner.” Google Cloud. Documentation. pp. 7. Jan. 22, 2019. Retrieved from: <https://cloud.google.com/spanner/docs/whitepapers/optimizing-schema-design>. [cited by applicant]
Information Retrieval. ETH Zurich, Fall 2012. Thomas Hofmann. Lecture 2 Indexing. Sep. 26, 2012. pp. 59. [cited by applicant]
Gao. Investigation and Comparison of Distributed NoSQL Database Systems. Aug. 29, 2017 (Aug. 29, 2017), XP055691698, 14 pages. Retrieved from the Internet: <http://grids.ucs.indiana.edu/ptliupages/publications/NoSQL_dat… [cited by applicant]
Invitation to Pay Additional Fees for International Application No. PCT/US2020/023330 dated May 18, 2020. 15 pages. [cited by applicant]
Minutes of Telephone Conversation and Preliminary Opinion for European Patent Application No. 20717741.1 dated Jan. 25, 2024. 9 pages. [cited by applicant]
Gollhardt, Christian: “Why do sites use random alphanumeric ids rather than database ids to identify content?” [online] Dec. 18, 2014. [Retrieved Dec. 11, 2023]. Retrieved from the internet: <https://stackoverflow.com/q… [cited by applicant]
Notice of Grant for Chinese Patent Application No. 202080005621.2 dated Jul. 8, 2024. 6 pages. [cited by applicant]
Wei. Research of a mass transaction record query system based on Hadoop. Feb. 2013. Thesis Submitted to Nanjing University of Posts and Telecommunications for the Degree of Master of Engineering. 64 pages. English trans… [cited by applicant]
Mühleisen et al. Multi-Level Indexing in a Dstributed Self-Organized Storage System. Jul. 14, 2011. IEEE Congress of Evolutionary Computation. 6 pages. [cited by applicant]
Notice of Allowance for Korean Patent Application No. 10-2021-7013584 dated Jan. 22, 2025. 2 pages. [cited by applicant]