SlideShare a Scribd company logo
©2017 Experian Information Solutions, Inc. All rights reserved. Experian and the Experian marks used herein are trademarks or registered
trademarks of Experian Information Solutions, Inc. Other product and company names mentioned herein are the trademarks of their
respective owners. No part of this copyrighted work may be reproduced, modified, or distributed in any form or manner without the prior
written permission of Experian.
Experian [Public. Confidential. Internal. Restricted. – please choose the appropriate category]
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 2
Experian Health - Moving Universal Identity Manager
from ANSI SQL to MongoDB
MongoDB World – Chicago
Sean Reisz
June 20, 2017
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 3
1.The steps to migrate from a traditional SQL architecture to a MongoDB architecture, including
improvements and iterations to simplify the migration.
2.Understand the design of a reference architecture for a performant and highly available application
using MongoDB.
3.Architecture performance and scale comparisons between traditional SQL database schemas and
the MongoDB document model.
Learning Objectives
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 4
• Simplify our schema and queries
• Improve performance
• Simplify future growth
• Improve replication & failover
Migrating from ANSI SQL to MongoDB allowed us to:
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 5
Experian Health – Our Vision
To shape the future of healthcare through cutting-edge,
innovative product designs, and improve operational
efficiency through integrated solutions and services
leveraging data-driven analytics and insights.
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 6
Experian Health Solutions
Revenue Cycle
Optimization Services &
Analytics
Revenue Cycle
Management
Care
Management
Identity
Management
Patient
Engagement
 Patient Estimates
 Patient Gifting
 Patient Schedule
 Patient Self-Service
 Patient Statements
 PaymentSafe®
 Care Coordination
Manager
 Clinical Data
Clearinghouse
 MemberMatch®
 Precise ID® with
Digital Risk Score
 Return Mail
 Universal Identity
Manager
 Patient Access
 Contract
Manager
 Claims
 Collections
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 7
Why Experian Health?
The Power of
Experian Data
Well-rounded
suite of offerings
Patented, KLAS-
ranked Touchless
WorkflowTM
System
Strong heritage in
RCM & Patient
Access
• 220 million consumer
credit profiles
• 235 million consumer
demographic profiles
Strength of solutions in
revenue cycle management
(SearchAmerica, MPV) &
Patient access (Passport
Health Communications)
• Revenue Cycle
Management
• Identity Management
• Patient Engagement
• Care Management
Our eCare NEXT® platform
earned the highest score
in the Patient Access
category of the 2017 Best
in KLAS: Software &
Services Report
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 8
Universal Identity Manager – What Is It?
What does the UIM Do?
The Universal Identity Manager (UIM) Is a person
record matching tool:
•Probabilistic matching engine
•Data Improvement
– Scrubbing
– Normalization
– Augmentation
•Matches related Person records
•Assigns a single identifier
•Provides a combined “best” view
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 9
Universal Identity Manager – What Is It?
How Is This Useful?
Allows for Disparate Data
•Incomplete Records
•Different data sources / domains
•Different data quality levels
Uses
•Improved patient care
•Historical and longitudinal data collection
•Coordination of benefits across clients
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 10
UIM SQL Schema
Source Record
Addresses
Aliases Phone Numbers
Identifiers
Address / Alias
Cross Reference
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 11
UIM Major Database Steps
Incoming
Record is
Received
Is
Record
in DB?
Pull Existing
Record Data
Find Candidate
Records
Pull Candidate
Record Data
Insert New
Record
Update Existing
Record
Was
Match
Found
?
Return UIM ID
Y
N
Y
N
Source Record
Lookup
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 12
UIM Major SQL DB Steps
Source Record Lookup (SQL)
SELECT * FROM SourceRecord WHERE
SourceRecordID = ?
Find Candidate Records (SQL)
SELECT category, id FROM (
SELECT DISTINCT ‘FN-LN-ZIP’ as category,
SourceRecordID from Xref WHERE FirstName = ?
AND LastName = ? AND Zip = ?
UNION ALL
SELECT DISTINCT ‘FN-DOB’ as category,
SourceRecordID from Xref WHERE FirstName = ?
AND Dob = ?
UNION ALL
SELECT DISTINCT ‘LN-DOB’ as category,
SourceRecordID from Xref WHERE LastName = ?
AND Dob = ?
UNION ALL
… )
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 13
UIM Major SQL DB Steps
Pull Candidate / Existing Record Data (SQL)
SELECT * FROM SourceRecord
LEFT OUTER JOIN Addresses on (SourceRecord.id =
Addresses.SourceRecordID)
LEFT OUTER JOIN Phones on (SourceRecord.id =
Phones.SourceRecordID)
LEFT OUTER JOIN Identifiers on (SourceRecord.id =
Identifiers.SourceRecordID)
LEFT OUTER JOIN Aliases on (SourceRecord.id =
Aliases.SourceRecordID)
LEFT OUTER JOIN Xrefs on (SourceRecord.id =
Aliases.SourceRecordID)
WHERE SourceRecord.id = ?
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 14
UIM Major SQL DB Steps
Insert / Update Record Data (SQL)
INSERT INTO SourceRecord VALUES (?,?,…)
-or- UPDATE SourceRecord SET VALUES = (?,?,..) WHERE id = ?
INSERT INTO Addresses VALUES (?,?,…)
-or- UPDATE Addresses SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM Addresses WHERE id = ?
INSERT INTO PhoneNumbers VALUES (?,?,…)
-or- UPDATE PhoneNumbers SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM PhoneNumbers WHERE id = ?
INSERT INTO Identifiers VALUES (?,?,…)
-or- UPDATE Identifiers SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM Identifiers WHERE id = ?
INSERT INTO Aliases VALUES (?,?,…)
-or- UPDATE Aliases SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM Aliases WHERE id = ?
INSERT INTO Xref VALUES (?,?,…)
-or- UPDATE Xref SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM Xref WHERE id = ?
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 15
UIM SQL Schema - Challenges
Database Size Multiple Indexes
Table Joins
Multiple Writes Per Person
Record
Cross Reference Table Replication and Failover
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 16
UIM New Architecture – Why MongoDB?
• MongoDB presence in the organization
• Document based writes / retrievals
• Easier growth as data increased
• Naturally better replication and failover
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 17
UIM Initial MongoDB Schema
Source Records
{
_id: <ObjectId>,
dob: ‘19010101’,
…
}
Addresses
Aliases
Phone
Numbers
Identifiers
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 18
MongoDB Performance
0
5000
10000
15000
20000
25000
Proof of Concept (100M Records)
Average Inserts / Minute
ANSI SQL
18,000 / minute
MongoDB 2.6.5
20,000 / minute
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 19
UIM MongoDB Lesson – Category Lookup
• Candidate lookup queries required multiple indexes
• Candidate queries could not use queries optimized for shards
Categories
{
_id: <ObjectId>,
sourceRecordId: <Source Record ObjectId>
category: ‘FN-DOB’,
value: ‘SEAN-19010101’
}
• Shard key is Category + Value
• Candidate lookup now can use queries that are optimized for shards
• Only one additional index was required
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 20
UIM MongoDB Lesson – Source Record ID Lookup
• Source Record lookup requires a query against the record’s logical key
• This query required an additional index
• Could not use queries optimized for shards
Source Record IDs
{
_id: <SourceRecord Logical ID>,
sourceRecord: <SourceRecord ObjectId>
}
• Source Record lookups now use default index
• Source Record lookups can use queries optimized for shards
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 21
UIM MongoDB Lesson – Single Document Category Lookup
• Candidate selection returns multiple records for each value
• The candidates returned are always the same set
• The Category collection still has an additional index
Categories
{
_id: { category: ‘FN-DOB’,
value: ‘SEAN-19010101’},
sourceRecords: [
<SourceRecord ObjectId>,
<SourceRecord ObjectId>,…]
}
• Allows single document retrieval
• Removes additional index
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 22
UIM Final MongoDB Schema
Categories
{
_id: { category: ‘FN-DOB’,
value: ‘SEAN-19010101’},
sourceRecords: [
<SourceRecord ObjectId>,
<SourceRecord ObjectId>,…]
}
Source Record IDs
{
_id: <SourceRecord Logical ID>,
sourceRecord: <SourceRecord
ObjectId>
}
Source Records
{
_id: <ObjectId>,
dob: ‘19010101’,
…
}
Addresses
Aliases
Phone
Numbers
Identifiers
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 23
Major Database Steps
Source Record Lookup (SQL)
SELECT * FROM SourceRecord WHERE
SourceRecordID = ?
Source Record Lookup (MongoDB)
db.SourceRecordIDs.find({_id: ?})
Find Candidate Records (SQL)
SELECT category, id FROM (
SELECT DISTINCT ‘FN-LN-ZIP’ as category,
SourceRecordID from Xref WHERE FirstName = ?
AND LastName = ? AND Zip = ?
UNION ALL
SELECT DISTINCT ‘FN-DOB’ as category,
SourceRecordID from Xref WHERE FirstName = ?
AND Dob = ?
UNION ALL
SELECT DISTINCT ‘LN-DOB’ as category,
SourceRecordID from Xref WHERE LastName = ?
AND Dob = ?
UNION ALL
… )
Find Candidate Records (MongoDB)
db.Categories. find({$or:[
{"_id.category":“FN-LN-ZIP", "_id.value" :?},
{"_id.category":"FN-DOB", "_id.value" :?},
{"_id.category":“LN-DOB", "_id.value" :?},
…]})
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 24
Major Database Steps
Pull Candidate / Existing Record Data (SQL)
SELECT * FROM SourceRecord
LEFT OUTER JOIN Addresses on
(SourceRecord.id = Addresses.SourceRecordID)
LEFT OUTER JOIN Phones on (SourceRecord.id
= Phones.SourceRecordID)
LEFT OUTER JOIN Identifiers on
(SourceRecord.id = Identifiers.SourceRecordID)
LEFT OUTER JOIN Aliases on (SourceRecord.id =
Aliases.SourceRecordID)
LEFT OUTER JOIN Xrefs on (SourceRecord.id =
Aliases.SourceRecordID)
WHERE SourceRecord.id = ?
Pull Candidate / Existing Record Data
(MongoDB)
db.SourceRecords.find({_id: ?})
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 25
Major Database Steps
Insert / Update Record Data (SQL)
INSERT INTO SourceRecord VALUES (?,?,…)
-or- UPDATE SourceRecord SET VALUES = (?,?,..) WHERE id =
?
INSERT INTO Addresses VALUES (?,?,…)
-or- UPDATE Addresses SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM Addresses WHERE id = ?
INSERT INTO PhoneNumbers VALUES (?,?,…)
-or- UPDATE PhoneNumbers SET VALUES = (?,?,…) WHERE id
= ?
-or- DELETE FROM PhoneNumbers WHERE id = ?
INSERT INTO Identifiers VALUES (?,?,…)
-or- UPDATE Identifiers SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM Identifiers WHERE id = ?
INSERT INTO Aliases VALUES (?,?,…)
-or- UPDATE Aliases SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM Aliases WHERE id = ?
INSERT INTO Xref VALUES (?,?,…)
-or- UPDATE Xref SET VALUES = (?,?,…) WHERE id = ?
-or- DELETE FROM Xref WHERE id = ?
Insert / Update Record Data (MongoDB)
db.SourceRecords.save({…})
db.SourceRecordIds.save({…})
db.Categories.save({…})
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 26
UIM MongoDB Schema - Benefits
Simplified Structure
Simplified Document
Retrieval / Document Writes
Simplified Queries Reduced Number of Indexes
Futureproofing – Sharding
Improved Failover /
Replication
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 27
UIM MongoDB Reference Architecture
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 28
MongoDB Performance
0
10000
20000
30000
40000
50000
60000
70000
80000
Reference DB (300M Records)
Average Inserts / Minute
MongoDB 3.2.9
70,000 / minute
ANSI SQL
15,000 / minute
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 29
In Summary
•We started with an ANSI SQL database
•We transitioned to MongoDB which better fit our
natural model
•With a few iterations we developed a final model
that
– Simplified the schema
– Minimized indexes
– Simplified queries
– Allowed all queries to be optimized for shards
•Final Architecture
– Significantly Improved performance
– Allowed for simpler future growth
– Improved failover / replication
© Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 30
Questions / Comments
©2017 Experian Information Solutions, Inc. All rights reserved. Experian and the Experian marks used herein are trademarks or registered
trademarks of Experian Information Solutions, Inc. Other product and company names mentioned herein are the trademarks of their
respective owners. No part of this copyrighted work may be reproduced, modified, or distributed in any form or manner without the prior
written permission of Experian.
Experian [Public. Confidential. Internal. Restricted. – please choose the appropriate category]

More Related Content

Similar to Experian Health: Moving Universal Identity Manager from ANSI SQL to MongoDB (20)

PPTX
Measure() or die()
Tamar Duvshani Hermel
 
PPTX
Measure() or die()
LivePerson
 
PDF
SQL for Analytics.pdfSQL for Analytics.pdf
namtunguyen6
 
PPTX
#CNX14 - Intro to Force
Salesforce Marketing Cloud
 
PPTX
Deliver Secure SQL Access for Enterprise APIs - August 29 2017
Nishanth Kadiyala
 
PPTX
Alkin Tezuysal "MySQL Query Optimization Best Practices and Indexing"
Fwdays
 
PPTX
Mysql query optimization best practices and indexing
Alkin Tezuysal
 
KEY
Introducing LINQ
LearnNowOnline
 
PDF
Our API Evolution: From Metadata to Tooling API for Building Incredible Apps
Dreamforce
 
PPTX
CQRS and Event Sourcing
Inho Kang
 
PDF
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
Oracle Korea
 
DOC
Resume
Rakhi Modi
 
PDF
Best Practices for Migrating RDBMS to MongoDB
Sheeri Cabral
 
PPTX
Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Developers
 
PPTX
Using Compass to Diagnose Performance Problems
MongoDB
 
PPTX
Using Compass to Diagnose Performance Problems in Your Cluster
MongoDB
 
PDF
Postgres: The NoSQL Cake You Can Eat
EDB
 
PDF
Reducing the Risks of Migrating Off Oracle
EDB
 
PDF
Verndale - Sitecore User Group Los Angeles Presentation
David Brown
 
PPTX
How To Become A Big Data Engineer | Big Data Engineer Skills, Roles & Respons...
Simplilearn
 
Measure() or die()
Tamar Duvshani Hermel
 
Measure() or die()
LivePerson
 
SQL for Analytics.pdfSQL for Analytics.pdf
namtunguyen6
 
#CNX14 - Intro to Force
Salesforce Marketing Cloud
 
Deliver Secure SQL Access for Enterprise APIs - August 29 2017
Nishanth Kadiyala
 
Alkin Tezuysal "MySQL Query Optimization Best Practices and Indexing"
Fwdays
 
Mysql query optimization best practices and indexing
Alkin Tezuysal
 
Introducing LINQ
LearnNowOnline
 
Our API Evolution: From Metadata to Tooling API for Building Incredible Apps
Dreamforce
 
CQRS and Event Sourcing
Inho Kang
 
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
Oracle Korea
 
Resume
Rakhi Modi
 
Best Practices for Migrating RDBMS to MongoDB
Sheeri Cabral
 
Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Developers
 
Using Compass to Diagnose Performance Problems
MongoDB
 
Using Compass to Diagnose Performance Problems in Your Cluster
MongoDB
 
Postgres: The NoSQL Cake You Can Eat
EDB
 
Reducing the Risks of Migrating Off Oracle
EDB
 
Verndale - Sitecore User Group Los Angeles Presentation
David Brown
 
How To Become A Big Data Engineer | Big Data Engineer Skills, Roles & Respons...
Simplilearn
 

More from MongoDB (20)

PDF
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
PDF
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
PDF
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
PDF
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
PDF
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
PDF
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
PDF
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
PDF
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
PDF
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
PDF
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
PDF
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 
Ad

Recently uploaded (20)

PDF
Next Generation AI: Anticipatory Intelligence, Forecasting Inflection Points ...
dleka294658677
 
PDF
99 Bottles of Trust on the Wall — Operational Principles for Trust in Cyber C...
treyka
 
PDF
Linux schedulers for fun and profit with SchedKit
Alessio Biancalana
 
PDF
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
PDF
Home Cleaning App Development Services.pdf
V3cube
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PDF
Bitkom eIDAS Summit | European Business Wallet: Use Cases, Macroeconomics, an...
Carsten Stoecker
 
PDF
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PPTX
Talbott's brief History of Computers for CollabDays Hamburg 2025
Talbott Crowell
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
Modern Decentralized Application Architectures.pdf
Kalema Edgar
 
PDF
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
PPTX
Wondershare Filmora Crack Free Download 2025
josanj305
 
PDF
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
Next Generation AI: Anticipatory Intelligence, Forecasting Inflection Points ...
dleka294658677
 
99 Bottles of Trust on the Wall — Operational Principles for Trust in Cyber C...
treyka
 
Linux schedulers for fun and profit with SchedKit
Alessio Biancalana
 
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
Home Cleaning App Development Services.pdf
V3cube
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
Bitkom eIDAS Summit | European Business Wallet: Use Cases, Macroeconomics, an...
Carsten Stoecker
 
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
Talbott's brief History of Computers for CollabDays Hamburg 2025
Talbott Crowell
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Modern Decentralized Application Architectures.pdf
Kalema Edgar
 
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
Wondershare Filmora Crack Free Download 2025
josanj305
 
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
Ad

Experian Health: Moving Universal Identity Manager from ANSI SQL to MongoDB

  • 1. ©2017 Experian Information Solutions, Inc. All rights reserved. Experian and the Experian marks used herein are trademarks or registered trademarks of Experian Information Solutions, Inc. Other product and company names mentioned herein are the trademarks of their respective owners. No part of this copyrighted work may be reproduced, modified, or distributed in any form or manner without the prior written permission of Experian. Experian [Public. Confidential. Internal. Restricted. – please choose the appropriate category]
  • 2. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 2 Experian Health - Moving Universal Identity Manager from ANSI SQL to MongoDB MongoDB World – Chicago Sean Reisz June 20, 2017
  • 3. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 3 1.The steps to migrate from a traditional SQL architecture to a MongoDB architecture, including improvements and iterations to simplify the migration. 2.Understand the design of a reference architecture for a performant and highly available application using MongoDB. 3.Architecture performance and scale comparisons between traditional SQL database schemas and the MongoDB document model. Learning Objectives
  • 4. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 4 • Simplify our schema and queries • Improve performance • Simplify future growth • Improve replication & failover Migrating from ANSI SQL to MongoDB allowed us to:
  • 5. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 5 Experian Health – Our Vision To shape the future of healthcare through cutting-edge, innovative product designs, and improve operational efficiency through integrated solutions and services leveraging data-driven analytics and insights.
  • 6. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 6 Experian Health Solutions Revenue Cycle Optimization Services & Analytics Revenue Cycle Management Care Management Identity Management Patient Engagement  Patient Estimates  Patient Gifting  Patient Schedule  Patient Self-Service  Patient Statements  PaymentSafe®  Care Coordination Manager  Clinical Data Clearinghouse  MemberMatch®  Precise ID® with Digital Risk Score  Return Mail  Universal Identity Manager  Patient Access  Contract Manager  Claims  Collections
  • 7. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 7 Why Experian Health? The Power of Experian Data Well-rounded suite of offerings Patented, KLAS- ranked Touchless WorkflowTM System Strong heritage in RCM & Patient Access • 220 million consumer credit profiles • 235 million consumer demographic profiles Strength of solutions in revenue cycle management (SearchAmerica, MPV) & Patient access (Passport Health Communications) • Revenue Cycle Management • Identity Management • Patient Engagement • Care Management Our eCare NEXT® platform earned the highest score in the Patient Access category of the 2017 Best in KLAS: Software & Services Report
  • 8. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 8 Universal Identity Manager – What Is It? What does the UIM Do? The Universal Identity Manager (UIM) Is a person record matching tool: •Probabilistic matching engine •Data Improvement – Scrubbing – Normalization – Augmentation •Matches related Person records •Assigns a single identifier •Provides a combined “best” view
  • 9. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 9 Universal Identity Manager – What Is It? How Is This Useful? Allows for Disparate Data •Incomplete Records •Different data sources / domains •Different data quality levels Uses •Improved patient care •Historical and longitudinal data collection •Coordination of benefits across clients
  • 10. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 10 UIM SQL Schema Source Record Addresses Aliases Phone Numbers Identifiers Address / Alias Cross Reference
  • 11. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 11 UIM Major Database Steps Incoming Record is Received Is Record in DB? Pull Existing Record Data Find Candidate Records Pull Candidate Record Data Insert New Record Update Existing Record Was Match Found ? Return UIM ID Y N Y N Source Record Lookup
  • 12. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 12 UIM Major SQL DB Steps Source Record Lookup (SQL) SELECT * FROM SourceRecord WHERE SourceRecordID = ? Find Candidate Records (SQL) SELECT category, id FROM ( SELECT DISTINCT ‘FN-LN-ZIP’ as category, SourceRecordID from Xref WHERE FirstName = ? AND LastName = ? AND Zip = ? UNION ALL SELECT DISTINCT ‘FN-DOB’ as category, SourceRecordID from Xref WHERE FirstName = ? AND Dob = ? UNION ALL SELECT DISTINCT ‘LN-DOB’ as category, SourceRecordID from Xref WHERE LastName = ? AND Dob = ? UNION ALL … )
  • 13. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 13 UIM Major SQL DB Steps Pull Candidate / Existing Record Data (SQL) SELECT * FROM SourceRecord LEFT OUTER JOIN Addresses on (SourceRecord.id = Addresses.SourceRecordID) LEFT OUTER JOIN Phones on (SourceRecord.id = Phones.SourceRecordID) LEFT OUTER JOIN Identifiers on (SourceRecord.id = Identifiers.SourceRecordID) LEFT OUTER JOIN Aliases on (SourceRecord.id = Aliases.SourceRecordID) LEFT OUTER JOIN Xrefs on (SourceRecord.id = Aliases.SourceRecordID) WHERE SourceRecord.id = ?
  • 14. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 14 UIM Major SQL DB Steps Insert / Update Record Data (SQL) INSERT INTO SourceRecord VALUES (?,?,…) -or- UPDATE SourceRecord SET VALUES = (?,?,..) WHERE id = ? INSERT INTO Addresses VALUES (?,?,…) -or- UPDATE Addresses SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM Addresses WHERE id = ? INSERT INTO PhoneNumbers VALUES (?,?,…) -or- UPDATE PhoneNumbers SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM PhoneNumbers WHERE id = ? INSERT INTO Identifiers VALUES (?,?,…) -or- UPDATE Identifiers SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM Identifiers WHERE id = ? INSERT INTO Aliases VALUES (?,?,…) -or- UPDATE Aliases SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM Aliases WHERE id = ? INSERT INTO Xref VALUES (?,?,…) -or- UPDATE Xref SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM Xref WHERE id = ?
  • 15. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 15 UIM SQL Schema - Challenges Database Size Multiple Indexes Table Joins Multiple Writes Per Person Record Cross Reference Table Replication and Failover
  • 16. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 16 UIM New Architecture – Why MongoDB? • MongoDB presence in the organization • Document based writes / retrievals • Easier growth as data increased • Naturally better replication and failover
  • 17. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 17 UIM Initial MongoDB Schema Source Records { _id: <ObjectId>, dob: ‘19010101’, … } Addresses Aliases Phone Numbers Identifiers
  • 18. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 18 MongoDB Performance 0 5000 10000 15000 20000 25000 Proof of Concept (100M Records) Average Inserts / Minute ANSI SQL 18,000 / minute MongoDB 2.6.5 20,000 / minute
  • 19. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 19 UIM MongoDB Lesson – Category Lookup • Candidate lookup queries required multiple indexes • Candidate queries could not use queries optimized for shards Categories { _id: <ObjectId>, sourceRecordId: <Source Record ObjectId> category: ‘FN-DOB’, value: ‘SEAN-19010101’ } • Shard key is Category + Value • Candidate lookup now can use queries that are optimized for shards • Only one additional index was required
  • 20. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 20 UIM MongoDB Lesson – Source Record ID Lookup • Source Record lookup requires a query against the record’s logical key • This query required an additional index • Could not use queries optimized for shards Source Record IDs { _id: <SourceRecord Logical ID>, sourceRecord: <SourceRecord ObjectId> } • Source Record lookups now use default index • Source Record lookups can use queries optimized for shards
  • 21. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 21 UIM MongoDB Lesson – Single Document Category Lookup • Candidate selection returns multiple records for each value • The candidates returned are always the same set • The Category collection still has an additional index Categories { _id: { category: ‘FN-DOB’, value: ‘SEAN-19010101’}, sourceRecords: [ <SourceRecord ObjectId>, <SourceRecord ObjectId>,…] } • Allows single document retrieval • Removes additional index
  • 22. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 22 UIM Final MongoDB Schema Categories { _id: { category: ‘FN-DOB’, value: ‘SEAN-19010101’}, sourceRecords: [ <SourceRecord ObjectId>, <SourceRecord ObjectId>,…] } Source Record IDs { _id: <SourceRecord Logical ID>, sourceRecord: <SourceRecord ObjectId> } Source Records { _id: <ObjectId>, dob: ‘19010101’, … } Addresses Aliases Phone Numbers Identifiers
  • 23. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 23 Major Database Steps Source Record Lookup (SQL) SELECT * FROM SourceRecord WHERE SourceRecordID = ? Source Record Lookup (MongoDB) db.SourceRecordIDs.find({_id: ?}) Find Candidate Records (SQL) SELECT category, id FROM ( SELECT DISTINCT ‘FN-LN-ZIP’ as category, SourceRecordID from Xref WHERE FirstName = ? AND LastName = ? AND Zip = ? UNION ALL SELECT DISTINCT ‘FN-DOB’ as category, SourceRecordID from Xref WHERE FirstName = ? AND Dob = ? UNION ALL SELECT DISTINCT ‘LN-DOB’ as category, SourceRecordID from Xref WHERE LastName = ? AND Dob = ? UNION ALL … ) Find Candidate Records (MongoDB) db.Categories. find({$or:[ {"_id.category":“FN-LN-ZIP", "_id.value" :?}, {"_id.category":"FN-DOB", "_id.value" :?}, {"_id.category":“LN-DOB", "_id.value" :?}, …]})
  • 24. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 24 Major Database Steps Pull Candidate / Existing Record Data (SQL) SELECT * FROM SourceRecord LEFT OUTER JOIN Addresses on (SourceRecord.id = Addresses.SourceRecordID) LEFT OUTER JOIN Phones on (SourceRecord.id = Phones.SourceRecordID) LEFT OUTER JOIN Identifiers on (SourceRecord.id = Identifiers.SourceRecordID) LEFT OUTER JOIN Aliases on (SourceRecord.id = Aliases.SourceRecordID) LEFT OUTER JOIN Xrefs on (SourceRecord.id = Aliases.SourceRecordID) WHERE SourceRecord.id = ? Pull Candidate / Existing Record Data (MongoDB) db.SourceRecords.find({_id: ?})
  • 25. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 25 Major Database Steps Insert / Update Record Data (SQL) INSERT INTO SourceRecord VALUES (?,?,…) -or- UPDATE SourceRecord SET VALUES = (?,?,..) WHERE id = ? INSERT INTO Addresses VALUES (?,?,…) -or- UPDATE Addresses SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM Addresses WHERE id = ? INSERT INTO PhoneNumbers VALUES (?,?,…) -or- UPDATE PhoneNumbers SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM PhoneNumbers WHERE id = ? INSERT INTO Identifiers VALUES (?,?,…) -or- UPDATE Identifiers SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM Identifiers WHERE id = ? INSERT INTO Aliases VALUES (?,?,…) -or- UPDATE Aliases SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM Aliases WHERE id = ? INSERT INTO Xref VALUES (?,?,…) -or- UPDATE Xref SET VALUES = (?,?,…) WHERE id = ? -or- DELETE FROM Xref WHERE id = ? Insert / Update Record Data (MongoDB) db.SourceRecords.save({…}) db.SourceRecordIds.save({…}) db.Categories.save({…})
  • 26. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 26 UIM MongoDB Schema - Benefits Simplified Structure Simplified Document Retrieval / Document Writes Simplified Queries Reduced Number of Indexes Futureproofing – Sharding Improved Failover / Replication
  • 27. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 27 UIM MongoDB Reference Architecture
  • 28. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 28 MongoDB Performance 0 10000 20000 30000 40000 50000 60000 70000 80000 Reference DB (300M Records) Average Inserts / Minute MongoDB 3.2.9 70,000 / minute ANSI SQL 15,000 / minute
  • 29. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 29 In Summary •We started with an ANSI SQL database •We transitioned to MongoDB which better fit our natural model •With a few iterations we developed a final model that – Simplified the schema – Minimized indexes – Simplified queries – Allowed all queries to be optimized for shards •Final Architecture – Significantly Improved performance – Allowed for simpler future growth – Improved failover / replication
  • 30. © Experian Private and confidential Moving Universal Identity Manager from ANSI SQL to MongoDB 30 Questions / Comments
  • 31. ©2017 Experian Information Solutions, Inc. All rights reserved. Experian and the Experian marks used herein are trademarks or registered trademarks of Experian Information Solutions, Inc. Other product and company names mentioned herein are the trademarks of their respective owners. No part of this copyrighted work may be reproduced, modified, or distributed in any form or manner without the prior written permission of Experian. Experian [Public. Confidential. Internal. Restricted. – please choose the appropriate category]

Editor's Notes

  • #3: Time on my story Improved quality of life Time spent maintaining Creaking architecture
  • #6: - Don't read vision - just pause & look - basically we're taking large data and using technology to help healthcare companies
  • #10: * Pay & Chase * Merging Hospital data * Medical History * Allergies
  • #16: Move quickly, build momentum DB Size: * Hundreds of Millions * Multiple DB Servers difficult Table Joins * All data required every time * Select query had 5 joins Xref * Denormalized * Huge, maintenance issue Indexes * Many required Multiple writes per record Replication & Failover * Replication difficult & time consuming * Failover is manual Recovery is painful - Why did we think to use MongoDB?
  • #17: Why did we think to use MongoDB? Had been thinking in SQL, not sure we’d get results – so we did a Proof of concept
  • #18: call out color coding
  • #19: 11% increase
  • #20: Principle: Fewer indexes Pretty much right away, categories
  • #21: Principle: Shard optimization - Like Categories, SRID'
  • #22: Principle: Single document retrieval MongoDB Engineer, helped us come up with - Add "how difficult it would be to add categories in the middle of development"
  • #24: - Remind blue = sql, purple = MongoDB
  • #27: Quality of life again Simplified Structure * Schema reduced to 1 main collection plus 2 helpers * Xref table not needed Simplified queries * Queries use _id fieldsd for selection /updates * Complex SQL qeries greatly simplified Futureproofing - Shards * All collections can be sharded * Queries will run against a single shard Simplified Document retrieval / Writes * Records are retrieved or written as single doc * Candidates retrieved as a single doc per category Reduced Indexes * Candidate selection required most, now requires single index Improved failover / replication * Replica sets allow handling of lost servers better * Loss of a node is not a manual thing "Now I'd like to show you how it all fits together..."
  • #28: I’d like to show how it all fits together
  • #29: 300% instead of 11%
  • #31: - Stress it didn't take that long to optimize
  • #32: Closing slide [uses Holding Slide layout] This slide can be used as a ‘closing’ slide and should not include any additional text or graphics. The same slide layout is used as a presentation opening slide. The brand mark and data art graphic on this slide layout are set up at the correct size and position and should not be altered.