Family Search Developer Conference - Challenges and Opportunities

29
FS Dev Conference Challenges & Opportunities

description

This presentation describes some of the larger challenges Family Search faces in its technology development. The intended audience is engineers who are working with Family Search to integrate functionality with Family Search systems. The primary challenges addressed are: handling large data sets, managing scale, performance, and availability in the face of rapidly rising usage, complexity of the service interfaces we provide, and facilitating computer reasoning about genealogical data.

Transcript of Family Search Developer Conference - Challenges and Opportunities

  • 1. 90th Percentile Times Family Tree (1x, w/ CIS) POC2 (1x) POC2 (10x) POC2 (20x) Person & Relationships 1730 ms 48 ms 33 ms 44 ms Pedigree 2700 ms 18 ms 36 ms 49 ms Pedigree Extend 2580 ms 12 ms 27 ms 35 ms Person Card 293 ms 14 ms 10 ms 10 ms Change History 5800 ms 35 ms 38 ms 50 ms Change History 6000 ms 21 ms 10 ms 11 ms Summary
  • 2. Cluster Nodes Type RAM Storage Cassandra 1.2.4 25-30 hi1.4xlarge 1.7 TB 58 TB (SSD) Eureka App 30-140 m3.2xlarge 1.0 TB -
  • 3. FamilySearchFamilyTree ft = ...; //add a person PersonState person= ft.addPerson(new Person() //named John Smith .name(new Name("John Smith", new NamePart(NamePartType.Given, "John"), new NamePart(NamePartType.Surname, "Smith"))) //male .gender(GenderType.Male) //born in chicago in 1920 .fact(new Fact(FactType.Birth, "1 January 1920", "Chicago, Illinois")) //died in new york 1980 .fact(new Fact(FactType.Death, "1 January 1980", "New York, New York"));
  • 4. String username = "..."; String password = "..."; String developerKey = "..."; String ark = ...; //e.g. "https://familysearch.org/ark:/61903/4:1:KW8W-RF8" FamilyTreePersonState person = new FamilyTreePersonState(URI.create(ark)) .authenticateViaOAuth2Password(username, password, developerKey);
  • 5. FamilySearch.getPersonWithRelationships('KW7S-VQJ', {persons:true}).then(function(response) { console.log(response.getPrimaryPerson().getName()); var spouses = response.getSpouses(); for (var s = 0; spousesLen = spouses.length; s < spousesLen; s++) { console.log(spouses[s].getName()); var children = response.getChildren(spouses[s].getId()); for (var c = 0; childrenLen = children.length; c < childrenLen; c++) { console.log(children[c].getName()); } } });