Post on 23-Aug-2014
description
DATA SHARING AND CARING IN HEALTHCARE
Presented By: Mark Scrimshire, Advisor +1 703 623 2789 mark@personiform.com Oybek Jumaniyozov Senior .NET Developer Personiform.com
DEALING WITH A DATA EXPLOSION New Data Sources:
From the Human Genome to Wearable technology Data demands are growing exponentially
DATA STEWARDSHIP
HIPAA demands Accountability 1. Data Security
2. Active Monitoring
3. Process Accountability
But who should be in control…
DATA MUST BE SECURELY SHARED A growing need to share data
u Between Providers
u With Payers
u With Regulatory Bodies
And…
u To and From Patients
CLINICAL RECORDS Obtaining clinical data in digital form is now very simple and efficient.
1. Give your Medyear address (user@medyear.com) to provider
2. Data is securely transmitted from provider EHR to Medyear (as XML file)
3. Clinical data is parsed into nine categories (see right)
4. Individual entries, or entire sections, can now be easily shared
HOW CAN NOSQL HELP?
HORIZONTAL SCALABILITY
Predictable Performance
u Linear performance in line with growth
u Commodity building blocks
MORE DATA. MORE INSIGHTS
Medyear links clinical and Non-Clinical data
u Preserving data source integrity
u Previously disparate data creates new insights
SQRRL-OUR DATA PLATFORM
Analytics (via Dell Kitenga)
u Fast and easy to manipulate data using drag & drop
u Actionable intelligence from massive amounts of unstructured and structured data
u Analytics and visualization on unstructured and structured data
Data-Centric security at the cell-level Scalable to multiple petabytes Complex search and analytics
DATA-CENTRIC SECURITY
Data Encryption at Rest
Encryption in Motion
Fine-grained Access Controls
Extensive Auditing
FOUR BIG DATA LESSONS FOR HEALTHCARE 1. Data-centric Security
2. Start small but design for scale
3. Iterative refinement
4. Discovery Analytics as critical building blocks
BUILDING THE FIRST PERSONAL HEALTH NETWORK
Simple but powerful controls put the Member in charge of:
u Who they share with
u What they share
u How long they share
Security Made Simple. NOT Simple Security
INTUITIVE SHARING
Privacy is flexible and established on the fly.
1. Sharing takes place on the secure Medyear social network
2. Users dictate which data is shared, with whom it is shared, and for how long it is shared.
@ = certain groups or people # = private chronicles ## = public chronicles (as anonymous) + = time limit on visibility
MEDYEAR PLATFORM
SQRRL BRINGS RAPID DEVELOPMENT BENEFITS Sqrrl enables fast, iterative development:
u Integrated Lucene Search capability
u REST API and JSON Support
u GraphSearch
SAMPLE DATA
{ "Id":"u1", "ElementType":"User", "User_UserName":"Isis", "User_DateRegistered":635317426614205340, "User_FullName":"Oybek Jumaniyozov" } { "Id":"u2", "ElementType":"User", "User_UserName":"jdoe", "User_DateRegistered":635321746614215345, "User_FullName":"John Doe" } { "Id":"u3", "ElementType":"User", "User_UserName":"GeekGuy", "User_DateRegistered":635326066614215345, "User_FullName":"Michael Pitt" }
{ "Id":"p1", "ElementType":"Post", "Post_PostContent":"Hello John", "Post_PostDate":635326930614215345 } { "Id":"p2", "ElementType":"Post", "Post_PostContent":"Hello Isis. Happy birthday.", "Post_PostDate":635326939254225345 } { "Id":"p3", "ElementType":"Post", "Post_PostContent":"Hello Everyone. No birthdays.", "Post_PostDate":635326947894225345 } { "Id": "p4", "ElementType": "Post", "Post_PostContent": "Hey guys what about a party?", "Post_PostDate": 635326956534225345 } { "Id": "p5", "ElementType": "Post", "Post_PostContent": "What party?", "Post_PostDate": 635326965174225410 } { "Id": "p6", "ElementType": "Post", "Post_PostContent": "I guess he is talking about a birthday party. No?", "Post_PostDate": 635326982454225345 }
EDGES { "Id":"u1", "ElementType":"User", "User_UserName":"Isis", "User_DateRegistered":635317426614205340, "User_FullName":"Oybek Jumaniyozov" } { "Id":"u2", "ElementType":"User", "User_UserName":"jdoe", "User_DateRegistered":635321746614215345, "User_FullName":"John Doe" } { "Id":"u3", "ElementType":"User", "User_UserName":"GeekGuy", "User_DateRegistered":635326066614215345, "User_FullName":"Michael Pitt" }
{ "Id":"p1", "ElementType":"Post", "Post_PostContent":"Hello John", "Post_PostDate":635326930614215345 } { "Id":"p2", "ElementType":"Post", "Post_PostContent":"Hello Isis. Happy birthday.", "Post_PostDate":635326939254225345 } { "Id":"p3", "ElementType":"Post", "Post_PostContent":"Hello Everyone. No birthdays.", "Post_PostDate":635326947894225345 } { "Id": "p4", "ElementType": "Post", "Post_PostContent": "Hey guys what about a party?", "Post_PostDate": 635326956534225345 } { "Id": "p5", "ElementType": "Post", "Post_PostContent": "What party?", "Post_PostDate": 635326965174225410 } { "Id": "p6", "ElementType": "Post", "Post_PostContent": "I guess he is talking about a birthday party. No?", "Post_PostDate": 635326982454225345 }
u1 => p1 UserPost
u2 => p2 UserPost
u3 => p3 UserPost
u1 => p4 UserPost
u2 => p5 UserPost
u3 => p6 UserPost
Edges with label “UserPost” logically means User (VertexIn) owns a post (VertexOut).
SQL FAMILIARITY WITH ADDED POWER
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ |uuid() json() | +-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ |u1 | +-‐ ElementType: "User" | | | +-‐ Id: "u1" | | | +-‐ User_DateRegistered: 635317426614205310| | | +-‐ User_FullName: "Oybek Jumaniyozov" | | | +-‐ User_UserName: "Isis" | +-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ |u2 | +-‐ ElementType: "User" | | | +-‐ Id: "u2" | | | +-‐ User_DateRegistered: 635321746614215300| | | +-‐ User_FullName: "John Doe" | | | +-‐ User_UserName: "jdoe" | +-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ |u3 | +-‐ ElementType: "User" | | | +-‐ Id: "u3" | | | +-‐ User_DateRegistered: 635326066614215300| | | +-‐ User_FullName: "Michael Pitt" | | | +-‐ User_UserName: "GeekGuy" | +-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
select uuid(), json() from testdataset where ElementType='User'
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ |uuid() Id ElementType User_DateRegistered User_FullName User_UserName| +-‐-‐-‐-‐-‐-‐+-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ |u1 |u1|User |635317426614205310 |Oybek Jumaniyozov|Isis | +-‐-‐-‐-‐-‐-‐+-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ |u2 |u2|User |635321746614215300 |John Doe |jdoe | +-‐-‐-‐-‐-‐-‐+-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ |u3 |u3|User |635326066614215300 |Michael Pitt |GeekGuy | +-‐-‐-‐-‐-‐-‐+-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
select uuid(), Id, ElementType, User_DateRegistered, User_FullName, User_UserName from testdataset where lucene('ElementType:User')
Integrated Lucene search:
p1 -> u1 (UserPost) p6 => u3 p3 => u3 p2 => u2 p4 => u1 p5 => u2 p1 => u1
USING CREATEGRAPHSEARCH
creategraphsearch -d testdataset
creategraphsearch -d testdataset -l UserPost
creategraphsearch -d testdataset -l UserPost -s u1
creategraphsearch -d testdataset -l UserPost -s p1
p6 => u3 p3 => u3 p2 => u2 p4 => u1 p5 => u2 p1 => u1
p4 -> u1 (UserPost) p1 -> u1 (UserPost)
FILTERING BASED ON TIME creategraphsearch -d testdataset -l UserPost -dir IN -nw Post_PostDate>=635326956534225345
p4 -> u1 (UserPost) p5 -> u2 (UserPost) p6 -> u3 (UserPost)
{ "Id": "p4", "ElementType": "Post", "Post_PostContent": "Hey guys what about a party?", "Post_PostDate": 635326956534225345 } { "Id": "p5", "ElementType": "Post", "Post_PostContent": "What party?", "Post_PostDate": 635326965174225410 } { "Id": "p6", "ElementType": "Post", "Post_PostContent": "I guess he is talking about a birthday party. No?", "Post_PostDate": 635326982454225345 }
C# EXAMPLE USING LUCENE Init(); var gSearch = Client.CreateGraphSearch(Auth, new GraphQuery { Dataset = "testdataset", Direction = Direction.In, EdgeLabels = new THashSet<String> { "UserPost" }, NeighborLuceneQuery = "Post_PostContent:party" }); var res = Client.NextGraphSearchResults(Auth, gSearch); Client.CloseGraphSearch(Auth, gSearch); res.Edges.ForEach(x => Console.WriteLine("{0} => {1} ({2})", x.OutVertexUuid, x.InVertexUuid, x.Label));
Output:
p6 => u3 (UserPost) p4 => u1 (UserPost) p5 => u2 (UserPost)
C# EXAMPLE WITH STANDARD PREDICATES
Init(); var queryText = @"SELECT ElementType, Id, Post_PostContent, Post_PostDate FROM testdataset WHERE ElementType='Post' AND Post_PostDate>=635326956534225410 AND lucene('Post_PostContent:birthday')"; var queryId = Client.CreateQuery(Auth, queryText); var queryResult = Client.NextSearchResults(Auth, queryId); PrintValues(queryResult.ResultHeader, queryResult.ResultBatch);
Output: +------------+--+-----------------------------+------------------+ |ElementType |Id|Post_PostContent |Post_PostDate | +------------+--+-----------------------------+------------------+ |Post |p6|I guess he is talking about a|635326982454225410| | | |birthday party. No? | | +------------+--+-----------------------------+------------------+
HEALTH IS PERSONAL u Healthcare is increasingly data driven u Wearables and Apps are increasing
health data volumes exponentially u Data sharing demands are exploding u Granular data controls are needed to
combine sharing with security u Strong audit trails are needed for
Monitoring and Compliance
MARK SCRIMSHIRE HEALTH AND CLOUD TECHNOLOGIST CHIEF INSTIGATOR - HEALTHCA.MP
mark@personiform.com +1.703.623.2789 http://www.medyear.com
THE FIRST PERSONAL HEALTH NETWORK -
BUILT WITH SQRRL
THANK YOU!
Medyear.com
Video Demo (https://vimeo.com/90151239)