IP Library Granted Patent US 12,493,601
Granted Patent B2
US 12,493,601 · App. 17/722,754 · Granted Dec 9, 2025

Index sharding

Inventors: Peter Kuimelis (Palo Alto, CA); Naresh Kumar (Santa Clara, CA); Satyam Shekhar (San Jose, CA); Amit Prakash (Saratoga, CA); Abhishek Rai (Palo Alto, CA)
Assignee: ThoughtSpot, Inc.
G06F16/2272G06F16/2255G06F16/278
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,493,601
App. No.
17/722,754
Granted
Dec 9, 2025
Kind
B2
Abstract

Indexing in a low-latency data access and analysis system includes accessing, by an indexing unit of a low-latency data access and analysis system, constituent data from a data source of the low-latency data access and analysis system and indexing the constituent data in an index of the low-latency data access and analysis system by an indexing unit of the low-latency data access and analysis system. Indexing includes partitioning the constituent data based on a characteristic of the constituent data into at least a first partition and a second partition, segmenting the first partition into a first segment of the first partition, sharding the first segment into a first shard of the first segment of the first partition, segmenting, using hash-partitioning, the second partition into one or more segments of the second partition, and for respective segments of the second partition, sharding the respective segment into one or more respective shards.

Claims (82)

1 . A method comprising:

accessing, by an indexing unit of a low-latency data access and analysis system, constituent data from a data source of the low-latency data access and analysis system; and

indexing the constituent data in an index of the low-latency data access and analysis system by the indexing unit of the low-latency data access and analysis system, wherein indexing includes:

partitioning the constituent data based on a characteristic of the constituent data into at least a first partition and a second partition;

segmenting the first partition into a first segment of the first partition;

sharding the first segment into a first shard of the first segment of the first partition;

segmenting, using hash partitioning, the second partition into one or more segments of the second partition; and

for respective segments of the second partition, sharding the respective segments into one or more respective shards.

2 . The method of claim 1 , wherein indexing includes:

sending, from the indexing unit to the data source, a request to pin a portion of a database of the data source corresponding to the constituent data;

in response to receiving, by the indexing unit, an indication that the portion of the database is pinned, sending, from the indexing unit to the data source, a sampling data request indicating a sampling data-query for the portion of the database; and

accessing, by the indexing unit, sampling results responsive to the sampling data-query.

3 . The method of claim 2 , wherein the constituent data includes a plurality of logical tables.

4 . The method of claim 3 , wherein partitioning includes:

identifying a smallest unpartitioned table from the plurality of logical tables;

determining that a current size of the first partition is less than a defined maximum size for the first partition, and in response to determining that the current size of the first partition is less than the defined maximum size for the first partition:

identifying a sum of the current size of the first partition and a size of the smallest unpartitioned table as the current size of the first partition; and

assigning the smallest unpartitioned table to the first partition;

determining that the current size of the first partition is at least the defined maximum size for the first partition, and in response to determining that the current size of the first partition is at least the defined maximum size for the first partition, assigning the smallest unpartitioned table to the second partition; and

identifying the smallest unpartitioned table as a partitioned table.

5 . The method of claim 3 , wherein segmenting, using hash partitioning, the second partition includes:

identifying, as a cardinality of the one or more segments of the second partition, a lesser of a defined maximum cardinality of segments of the second partition or a quotient of dividing a sum of sizes of tables from the plurality of logical tables assigned to the second partition by a defined maximum segment size.

6 . The method of claim 2 , wherein, for a respective segment, sharding includes:

identifying, by a segment manager of the indexing unit, an indexing mode for indexing an object from the respective segment based on the sampling results;

generating, by the segment manager, a shard specification for generating a shard of the respective segment based on the sampling results and the indexing mode;

sending, from the indexing unit to the data source, a constituent data request indicating a constituent data-query for the respective segment;

generating a shard assignment indicating the shard specification and an indexing operation unit; and

generating, by the indexing operation unit, the shard based on the shard assignment, wherein generating the shard includes accessing the constituent data responsive to the constituent data request.

7 . The method of claim 1 , further comprising:

receiving data expressing usage intent with respect to the constituent data;

in response to receiving the data expressing usage intent, generating response data responsive to the data expressing usage intent, wherein generating the response data includes resolving at least a portion of the data expressing usage intent by traversing the index, wherein traversing the index includes traversing a shard from the index to identify a token corresponding to a portion of the data expressing usage intent; and

outputting the response data.

8 . The method of claim 1 , wherein the characteristic is table size.

9 . The method of claim 1 , wherein indexing includes:

obtaining, by the low-latency data access and analysis system, index configuration data for indexing the constituent data, wherein the index configuration data includes at least one of token type information, data source information, or index distribution coordination information.

10 . A low-latency data access and analysis system comprising:

a non-transitory computer-readable storage medium that stores instructions for operating the low-latency data access and analysis system; and

a processor that executes the instructions to operate an indexing unit to index constituent data in an index of the low-latency data access and analysis system, wherein, to index the constituent data, the processor executes the instructions to:

access, by the indexing unit, the constituent data from a data source;

partition the constituent data based on a characteristic of the constituent data into at least a first partition and a second partition;

segment the first partition into a first segment of the first partition;

shard the first segment into a first shard of the first segment of the first partition;

segment, using hash partitioning, the second partition into one or more segments of the second partition; and

for respective segments of the second partition, shard the respective segments into one or more respective shards.

11 . The low-latency data access and analysis system of claim 10 , wherein, to index the constituent data, the processor executes the instructions to:

send, from the indexing unit to the data source, a request to pin a portion of a database of the data source corresponding to the constituent data;

receive, by the indexing unit, an indication that the portion of the database is pinned;

in response to the indication that the portion of the database is pinned, send, from the indexing unit to the data source, a sampling data request indicating a sampling data-query for the portion of the database; and

access, by the indexing unit, sampling results responsive to the sampling data-query.

12 . The low-latency data access and analysis system of claim 11 , wherein the constituent data includes a plurality of logical tables.

13 . The low-latency data access and analysis system of claim 12 , wherein, to partition the constituent data, the processor executes the instructions to:

identify a smallest unpartitioned table from the plurality of logical tables;

in response to a determination that a current size of the first partition is less than a defined maximum size for the first partition:

identify a sum of the current size of the first partition and a size of the smallest unpartitioned table as the current size of the first partition; and

assign the smallest unpartitioned table to the first partition;

in response to a determination that the current size of the first partition is at least the defined maximum size for the first partition, assign the smallest unpartitioned table to the second partition; and

identify the smallest unpartitioned table as a partitioned table.

14 . The low-latency data access and analysis system of claim 12 , wherein, to segment, using hash partitioning, the second partition, the processor executes the instructions to:

identify, as a cardinality of the one or more segments of the second partition, a lesser of a defined maximum cardinality of segments of the second partition or a quotient of dividing a sum of sizes of tables from the plurality of logical tables assigned to the second partition by a defined maximum segment size.

15 . The low-latency data access and analysis system of claim 11 , wherein, to shard a respective segment, the processor executes the instructions to:

identify, by a segment manager of the indexing unit, an indexing mode for indexing an object from the respective segment based on the sampling results;

generate, by the segment manager, a shard specification for generating a shard of the respective segment based on the sampling results and the indexing mode;

send, from the indexing unit to the data source, a constituent data request indicating a constituent data-query for the respective segment;

generate a shard assignment indicating the shard specification and an indexing operation unit; and

generate, by the indexing operation unit, the shard based on the shard assignment, wherein generating the shard includes accessing the constituent data responsive to the constituent data request.

16 . The low-latency data access and analysis system of claim 10 , wherein the processor executes the instructions to:

receive data expressing usage intent with respect to the constituent data;

generate response data responsive to the data expressing usage intent, wherein to generate the response data the processor executes the instructions to resolve at least a portion of the data expressing usage intent, wherein to resolve the processor executes the instructions to traverse the index, wherein to traverse the index the processor executes the instructions to traverse a shard from the index to identify a token corresponding to a portion of the data expressing usage intent; and

output the response data.

17 . The low-latency data access and analysis system of claim 10 , wherein the characteristic is table size.

18 . The low-latency data access and analysis system of claim 10 , wherein to index the constituent data the processor executes the instructions to:

obtain index configuration data for indexing the constituent data, wherein the index configuration data includes at least one of token type information, data source information, or index distribution coordination information.

19 . A non-transitory computer-readable storage medium that includes instructions executed by a processor to perform operations comprising:

accessing, by an indexing unit of a low-latency data access and analysis system, constituent data from a data source of the low-latency data access and analysis system; and

indexing the constituent data in an index of the low-latency data access and analysis system by the indexing unit of the low-latency data access and analysis system, wherein indexing includes:

partitioning the constituent data based on a characteristic of the constituent data into at least a first partition and a second partition;

segmenting the first partition into a first segment of the first partition;

sharding the first segment into a first shard of the first segment of the first partition;

segmenting, using hash partitioning, the second partition into one or more segments of the second partition; and

for respective segments of the second partition, sharding the respective segments into one or more respective shards.

20 . The non-transitory computer-readable storage medium of claim 19 , wherein indexing includes:

obtaining, by the low-latency data access and analysis system, index configuration data for indexing the constituent data, wherein the index configuration data includes at least one of token type information, data source information, or index distribution coordination information.

Assignments (2)
SECURITY INTEREST Recorded Mar 7, 2025
From: THOUGHTSPOT, INC.; THOUGHTSPOT, LLC
To: TRIPLEPOINT CAPITAL LLC
Reel/Frame 070442/0499 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 18, 2022
From: KUIMELIS, PETER; KUMAR, NARESH; SHEKHAR, SATYAM; PRAKASH, AMIT; RAI, ABHISHEK
To: THOUGHTSPOT, INC.
Reel/Frame 059624/0669 →
Continuity (3)
Continuation 16556719 · Aug 30, 2019
Provisional Application 62799627 · Jan 31, 2019
Related Publication 20220253421A1 · Aug 11, 2022
References Cited (55)
US 5960194A · Choy et al. · 1999 [cited by applicant]
US 6665684B2 · Zait et al. · 2003 [cited by applicant]
US 8572091B1 · Sivasubramanian · 2013 [cited by examiner]
US 8577913B1 · Hansson et al. · 2013 [cited by applicant]
US 8930312B1 · Rath · 2015 [cited by examiner]
US 9275132B2 · Roberts et al. · 2016 [cited by applicant]
US 9405794B2 · Prakash et al. · 2016 [cited by applicant]
US 10108690B1 · Murray · 2018 [cited by applicant]
US 11030169B1 · Wu · 2021 [cited by examiner]
US 20040267730A1 · Dumais et al. · 2004 [cited by applicant]
US 20050027717A1 · Koudas et al. · 2005 [cited by applicant]
US 20050289124A1 · Kaiser et al. · 2005 [cited by applicant]
US 20070192300A1 · Reuther et al. · 2007 [cited by applicant]
US 20070219974A1 · Chickering et al. · 2007 [cited by applicant]
US 20080109422A1 · Dedhia · 2008 [cited by applicant]
US 20090019019A1 · Jones et al. · 2009 [cited by applicant]
US 20090019022A1 · Schallert et al. · 2009 [cited by applicant]
US 20110113048A1 · Njemanze · 2011 [cited by applicant]
US 20110213775A1 · Franke et al. · 2011 [cited by applicant]
US 20120066217A1 · Eder · 2012 [cited by applicant]
US 20130159659A1 · Gelman et al. · 2013 [cited by applicant]
US 20130339370A1 · Holstege et al. · 2013 [cited by applicant]
US 20140201241A1 · Wood et al. · 2014 [cited by applicant]
US 20140337371A1 · Li · 2014 [cited by applicant]
US 20150339369A1 · Rais-Ghasem et al. · 2015 [cited by applicant]
US 20160026667A1 · Mukherjee et al. · 2016 [cited by applicant]
US 20170103098A1 · Hu · 2017 [cited by examiner]
US 20170270159A1 · Wang et al. · 2017 [cited by applicant]
US 20200004449A1 · Rath et al. · 2020 [cited by applicant]
EP 268367A2 · 1988 [cited by applicant]
EP 1587011A1 · 2005 [cited by applicant]
EP 2202658A2 · 2010 [cited by applicant]
EP 2207106A2 · 2010 [cited by applicant]
WO 0141002A1 · 2001 [cited by applicant]
WO 2015009353A1 · 2015 [cited by applicant]
Sayyadian et al., “Efficient Keyword Search Across Heterogeneous Relational Databases”, 2007, IEEE, 346-355 (10 pp). [cited by applicant]
Wu et al: “Towards Keyword-Driven Analytical Processing”, Proceedings of the 2007 ACM Sigmod International Conference on Management of Data, Sigmo '07, Jun. 12, 2007, (12 pp). [cited by applicant]
Shi et al.: “50x Faster: Speeding Up An SQL-Based Legacy System With Few Changes”, Oct. 4, 2011 Retrieved from Internet: URL: http://www.user.tu-berline.de/komm/CD/paper/040221.pdf [retrieved on Jun. 11, 2014]. (12 pp). [cited by applicant]
Blunschi et al.: “SODA: Generating SQL for Business Users”, Proceedings of the VLDB Endowment, vol. 5, No. 10, Aug. 27, 2012 pp. 932-935 (12 pp). [cited by applicant]
Baid et al: “Toward Scalable Keyword Search over Relational Data”, Proceedings of the VLDS Endowment, vol. 3, No. 1-2, Sep. 1, 2010, pp. 140-149 (10 pp). [cited by applicant]
Jajodia et al., “Flexible Support for Multiple Access Control Policies”, ACM Transactions on Database Systems, ACM New York, NY, USA, vol. 26, No. 2, Jun. 1, 2001, pp. 217-228 (48 pp). [cited by applicant]
International Search Report and Written Opinion for PCT/US14/39230; Date of mailing Nov. 24, 2014 (16 pp). [cited by applicant]
Anonymous: “File System Permission—Wikipedia, The Free Encyclopedia.” Jun. 11, 2013 (Jun. 11, 2013); URL: http:/en.wikipedia.org/w/index/php?title.sub.-File.sub.-system.sub.-p- ermissionsoldid=559455322 [retrieved on Ma… [cited by applicant]
Li et al: “Efficient Type-Ahead Search on Relational Data: a TASTIER Approach”, Sigmod-Pods '09: Compilation Proceedings of the International Conference on Management Data 28th Symposium on Principles of Database System… [cited by applicant]
Anonymous, “Natural Language Processing”, Wikipedia, Downloaded Jan. 30, 2019, https://en.wikipedia.org/wiki/Natural_language_processing, (8 pp). [cited by applicant]
Seif, G., “An Easy Introduction to Natural Language Processing—Using Computers to Understand Human Language”, Oct. 1, 2018 (Downloaded Jan. 30, 2019), https://towardsdatascience.com/an-easy-introduction-to-natural-langu… [cited by applicant]
Avrach, A., thoughtspot.com, “What the Bleep is a Chasm Trap?”, https://www.thoughtspot.com/fact-and-dimension/what-bleep-chasm-trap 9/, Date Unknown, Downloaded Apr. 2, 2019 (9 pp). [cited by applicant]
Sisense, “Chasm and Fan Traps”, https://documentation.sisense.com/latest/managing-data/working-with-data/chasm-fan-traps.htm, Date Unknown, Downloaded Apr. 2, 2019 (8 pp). [cited by applicant]
Thoughtspot, “Chasm Traps”, https://docs.thoughtspot.com/4.4/admin/loading/chasm-trap.html, Version 4.4 Guides, Date Unknown, Downloaded Apr. 2, 2019 (4 pp). [cited by applicant]
Extended European Search Report received in co-pending Application No. EP 19160657.3 dated Apr. 4, 2019 (11 pp). [cited by applicant]
Eades, Peter, et al., “A Fast & Effective Heuristic for the Feedback Arc Set Problem,” Information Processing Letters, vol. 47, Issue 6, Oct. 18, 1993, pp. 319-323. [cited by applicant]
Wikipedia, “Dijkstra's algorithm”, Date Unknown, downloaded Jul. 16, 2019, https://en.wikipedia.org/wiki/Dijkstra% 27s_algorithm (11 pp). [cited by applicant]
Wikipedia, “Consistent hashing”, https://en.wikipedia.org/wiki/Consistent_hashing, Date Unknown, Downloaded Aug. 15, 2019, (5 pp). [cited by applicant]
Morton, K., et al., “Dynamic Workload Driven Data Integration In Tableau”, Proceedings of the 2012 International Conference on Management of Data, SIGMOD '12, Jan. 1, 2012, p. 807 (9 pp). [cited by applicant]
Extended European Search Report dated Jul. 26, 2019, issued in co-pending EP Application No. 19166422.6 (11 pp). [cited by applicant]