IP Library Granted Patent US 12,293,076
Granted Patent B2
US 12,293,076 · App. 17/871,972 · Granted May 6, 2025

High-compression, high-volume deduplication cache

Inventors: Luke A. Higgins (Silver Spring, MD); Robert R. Bruno (Columbia, MD)
Assignee: MORGAN STANLEY SERVICES GROUP INC.
G06F3/0608G06F3/0641G06F3/0673G06F12/084G06F2212/62
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,293,076
App. No.
17/871,972
Granted
May 6, 2025
Kind
B2
Abstract

A method for caching and deduplicating a plurality of received segments of data is disclosed. The method comprises identifying a value of a first data field in each segment acting as a unique source identifier; and identifying a value of a second data field in each segment, the second data field being densely populated by values in the plurality of segments. The value of the second data field is partitioned into a first partition comprising more significant bits and a second partition comprising less significant bits. A key is generated based on values of the first data field and the first partition. A database entry associates the first key with a bitmap, the bitmap having a length based on the number of possible values a bitmap of equal length to the second partition could validly take. Single bits of the bitmap are set corresponding to received segments, to enable deduplication.

Claims (57)

1. A system for caching and deduplicating a plurality of segments of data, comprising:

at least one server having one or more processors;

at least one database; and

non-transitory memory comprising instructions that, when executed by the one or more processors, cause the one or more processors to:

receive, at the server, a first segment of data from the plurality of segments of data;

identify a value of a first data field in the first segment of data, the value of the first data field comprising a unique source identifier;

perform a transformation on the value of the first data field to obtain a transformed source identifier;

identify a value of a second data field in the first segment of data, the second data field being densely populated by values in the plurality of received segments of data;

partition the value of the second data field into a first partition comprising more significant bits and a second partition comprising less significant bits;

generate a first key based on the transformed source identifier and the first partition comprising more significant bits;

store, in the at least one database, an entry associating the first key with a bitmap, the bitmap having a maximum length equal to a maximum number of possible values a bitmap of equal length to the second partition could validly take;

set a single bit of the bitmap, corresponding to a value of the second partition, to true;

receive, at the server, a second segment of data from the plurality of segments of data;

likewise generate a second key based on a transformed source identifier in the second segment of data and a value of a first partition of the second data field in the second segment of data;

retrieve a bitmap associated with the second key; and

based on a set bit in the retrieved bitmap corresponding to a value of the second partition of the second data field of the second segment of data, determine that the second segment of data had previously been received by the server.

2. The system of claim 1 , wherein the non-transitory memory comprises instructions that, when executed by the one or more processors, further cause the one or more processors to:

receive, at the server, a third segment of data from the plurality of segments of data;

generate a third key;

retrieve a bitmap associated with the third key; and

based on an unset bit in the retrieved bitmap corresponding to a value of the second partition of the second data field of the third segment of data, determine that the third segment of data had not previously been received by the server.

3. The system of claim 1 , wherein the non-transitory memory comprises instructions that, when executed by the one or more processors, further cause the one or more processors to:

identify a portion of entries stored in the at least one database having an age greater than a predetermined threshold; and

drop the identified portion of entries from the at least one database.

4. The system of claim 3 , wherein the portion of entries is identified based on at least a portion of a timestamp included in the key of each entry in the portion of entries.

5. The system of claim 1 , wherein the second data field comprises values generated by an incrementing counter.

6. The system of claim 1 , wherein the first and second keys further comprise at least a portion of a timestamp.

7. The system of claim 1 , wherein the first and second keys comprise a concatenation of strings, the strings comprising at least transformed source identifier and the first partition of the second data field.

8. The system of claim 7 , wherein the strings further comprise at least a portion of a timestamp.

9. The system of claim 1 , wherein the bitmap has an adaptive length depending on values previously encountered for the second partition.

10. A computer-implemented method for caching and deduplicating a plurality of segments of data, comprising:

receiving a first segment of data from the plurality of segments of data;

identifying a value of a first data field in the first segment of data, the value of the first data field comprising a unique source identifier;

performing a transformation on the value of the first data field to obtain a transformed source identifier;

identifying a value of a second data field in the first segment of data, the second data field being densely populated by values in the plurality of received segments of data;

partitioning the value of the second data field into a first partition comprising more significant bits and a second partition comprising less significant bits;

generating a first key based on the transformed source identifier and the first partition comprising more significant bits;

storing, in a database, an entry associating the first key with a bitmap, the bitmap having a maximum length equal to a maximum number of possible values a bitmap of equal length to the second partition could validly take;

setting a single bit of the bitmap, corresponding to a value of the second partition, to true;

receiving a second segment of data from the plurality of segments of data;

likewise generating a second key based on a transformed source identifier from the first data field in the second segment of data and a value of a first partition of the second data field in the second segment of data;

retrieving a bitmap associated with the second key; and

based on a set bit in the retrieved bitmap corresponding to a value of the second partition of the second data field of the second segment of data, determining that the second segment of data had previously been received.

11. The method of claim 10 , wherein the non-transitory memory comprises instructions that, when executed by the one or more processors, further cause the one or more processors to:

receive, at the server, a third segment of data from the plurality of segments of data;

generate a third key;

retrieve a bitmap associated with the third key; and

based on an unset bit in the retrieved bitmap corresponding to a value of the second partition of the second data field of the third segment of data, determine that the third segment of data had not previously been received by the server.

12. The method of claim 10 , wherein the non-transitory memory comprises instructions that, when executed by the one or more processors, further cause the one or more processors to:

identify a portion of entries stored in the at least one database having an age greater than a predetermined threshold; and

drop the identified portion of entries from the at least one database.

13. The method of claim 12 , wherein the portion of entries is identified based on at least a portion of a timestamp included in the key of each entry in the portion of entries.

14. The method of claim 10 , wherein the second data field comprises values generated by an incrementing counter.

15. The method of claim 10 , wherein the first and second keys further comprise at least a portion of a timestamp.

16. The method of claim 10 , wherein the first and second keys comprise a concatenation of strings, the strings comprising at least a transformed source identifier and a first partition of the second data field.

17. The method of claim 16 , wherein the strings further comprise at least a portion of a timestamp.

18. The method of claim 10 , wherein the bitmap has an adaptive length depending on values previously encountered for the second partition.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 24, 2022
From: HIGGINS, LUKE A; BRUNO, ROBERT R
To: MORGAN STANLEY SERVICES GROUP INC.
Reel/Frame 060601/0174 →
Continuity (2)
Continuation In Part 17502898 · Oct 15, 2021
Related Publication 20230124863A1 · Apr 20, 2023
References Cited (34)
US 5563946A · Cooper · 1996 [cited by applicant]
US 5598470A · Cooper · 1997 [cited by applicant]
US 5689560A · Cooper · 1997 [cited by applicant]
US 5737416A · Cooper · 1998 [cited by applicant]
US 5757907A · Cooper · 1998 [cited by applicant]
US 7891012B1 · Kiel · 2011 [cited by examiner]
US 8089861B1 · Rahim · 2012 [cited by applicant]
US 8563048B2 · Magee · 2013 [cited by examiner]
US 8832045B2 · Dodd · 2014 [cited by applicant]
US 9367557B1 · Lin · 2016 [cited by examiner]
US 11120032B1 · Chen · 2021 [cited by examiner]
US 11422977B1 · Higgins · 2022 [cited by examiner]
US 11995050B2 · Ponnala · 2024 [cited by examiner]
US 20050125383A1 · Gilfix · 2005 [cited by applicant]
US 20050126383A1 · Nagai · 2005 [cited by examiner]
US 20060168451A1 · Shi · 2006 [cited by applicant]
US 20060188454A1 · Corcoran · 2006 [cited by examiner]
US 20100200468A1 · Dana · 2010 [cited by examiner]
US 20100290468A1 · Lynam · 2010 [cited by applicant]
US 20110246741A1 · Raymond · 2011 [cited by applicant]
US 20110246744A1 · Kirscht · 2011 [cited by examiner]
US 20120079009A1 · Carter · 2012 [cited by applicant]
US 20150128274A1 · Giokas · 2015 [cited by applicant]
US 20160301561A1 · Petersen · 2016 [cited by examiner]
US 20170366457A1 · Wang · 2017 [cited by examiner]
US 20180128274A1 · Wirth · 2018 [cited by examiner]
US 20190132207A1 · Nataraj · 2019 [cited by applicant]
US 20190171624A1 · Douglis · 2019 [cited by examiner]
US 20200057752A1 · Tofano · 2020 [cited by applicant]
US 20200250141A1 · Liu · 2020 [cited by applicant]
US 20200260141A1 · Radloff · 2020 [cited by examiner]
US 20210034571A1 · Bedadala · 2021 [cited by examiner]
US 20210232707A1 · Wilson · 2021 [cited by applicant]
US 20220156233A1 · Ponnala · 2022 [cited by examiner]