WEBVTT

1
00:00:04.375 --> 00:00:08.215
<00:00:04.375>Hello <00:00:04.502>everyone. <00:00:04.629>Welcome <00:00:04.756>to <00:00:04.884>my <00:00:05.011>talk <00:00:05.138>on <00:00:05.265>leveraging <00:00:05.393>real-time <00:00:05.520>data <00:00:05.647>in <00:00:05.775>fsis.

2
00:00:08.755 --> 00:00:11.495
<00:00:08.755>My <00:00:08.955>name's <00:00:09.155>Tim <00:00:09.355>Forks. <00:00:09.555>My <00:00:09.755>background <00:00:09.955>is <00:00:10.155>development.

3
00:00:11.525 --> 00:00:15.015
<00:00:11.525>I've <00:00:11.641>been <00:00:11.758>an <00:00:11.875>enterprise <00:00:11.991>application <00:00:12.108>architect <00:00:12.225>for <00:00:12.341>more <00:00:12.458>decades <00:00:12.575>than <00:00:12.691>I <00:00:12.808>care <00:00:12.925>to

4
00:00:15.015 --> 00:00:19.895
<00:00:15.015>admit <00:00:15.142>in <00:00:15.269>public, <00:00:15.396>and <00:00:15.524>I'm <00:00:15.651>really <00:00:15.778>passionate <00:00:15.905>about <00:00:16.033>building <00:00:16.160>high <00:00:16.287>quality <00:00:16.415>code,

5
00:00:19.895 --> 00:00:24.615
<00:00:19.895>writing <00:00:20.022>demos <00:00:20.149>and <00:00:20.276>making <00:00:20.404>the <00:00:20.531>most <00:00:20.658>use <00:00:20.785>of <00:00:20.913>the <00:00:21.040>tools <00:00:21.167>we've <00:00:21.294>got

6
00:00:24.615 --> 00:00:26.415
<00:00:24.615>available <00:00:24.965>from <00:00:25.314>the <00:00:25.665>development <00:00:26.014>perspective.

7
00:00:28.285 --> 00:00:32.695
<00:00:28.285>What <00:00:28.378>I <00:00:28.471>want <00:00:28.565>to <00:00:28.658>talk <00:00:28.751>to <00:00:28.845>you <00:00:28.938>about <00:00:29.031>today <00:00:29.125>is <00:00:29.218>real-time <00:00:29.311>data. <00:00:29.405>Now, <00:00:29.498>as <00:00:29.591>I <00:00:29.685>said,

8
00:00:32.695 --> 00:00:37.015
<00:00:32.695>my <00:00:32.802>background <00:00:32.910>is <00:00:33.018>development <00:00:33.125>and <00:00:33.233>I <00:00:33.341>know <00:00:33.448>that <00:00:33.556>typically <00:00:33.664>when <00:00:33.771>we <00:00:33.879>talk <00:00:33.987>about <00:00:34.095>modern

9
00:00:37.015 --> 00:00:39.535
<00:00:37.015>development, <00:00:37.215>uh, <00:00:37.415>application <00:00:37.615>stacks <00:00:37.815>looks <00:00:38.015>something <00:00:38.215>like <00:00:38.415>this,

10
00:00:40.065 --> 00:00:44.535
<00:00:40.065>we've <00:00:40.220>got <00:00:40.376>application <00:00:40.531>clients <00:00:40.687>which <00:00:40.842>are <00:00:40.998>web-based <00:00:41.153>UI <00:00:41.309>something <00:00:41.464>using

11
00:00:44.985 --> 00:00:49.695
<00:00:44.985>React <00:00:45.101>or <00:00:45.218>Angular <00:00:45.335>or <00:00:45.451>something <00:00:45.568>like <00:00:45.685>that. <00:00:45.801>They <00:00:45.918>typically <00:00:46.035>talk <00:00:46.151>to <00:00:46.268>mid <00:00:46.385>tiers,

12
00:00:49.695 --> 00:00:51.575
<00:00:49.695>which <00:00:50.045>talk <00:00:50.395>to <00:00:50.745>ELBs. <00:00:51.095>Um,

13
00:00:51.795 --> 00:00:54.855
<00:00:51.795>and <00:00:52.028>you've <00:00:52.261>got <00:00:52.495>worker <00:00:52.728>nodes <00:00:52.961>through <00:00:53.195>Kubernetes,

14
00:00:55.185 --> 00:01:00.135
<00:00:55.185>which <00:00:55.325>have <00:00:55.465>your <00:00:55.605>mid-tier <00:00:55.745>application <00:00:55.885>servers <00:00:56.025>running <00:00:56.165>on <00:00:56.305>them <00:00:56.445>with <00:00:56.585>microservices

15
00:01:00.155 --> 00:01:01.655
<00:01:00.155>on <00:01:00.492>them. <00:01:00.830>These <00:01:01.167>are <00:01:01.505>scalable,

16
00:01:01.865 --> 00:01:05.175
<00:01:01.865>these <00:01:01.992>are <00:01:02.119>well <00:01:02.246>thought <00:01:02.374>out <00:01:02.501>patterns <00:01:02.628>and <00:01:02.755>things <00:01:02.883>that <00:01:03.010>people <00:01:03.137>are <00:01:03.265>very,

17
00:01:05.175 --> 00:01:08.135
<00:01:05.175>very <00:01:05.349>well <00:01:05.524>versed <00:01:05.700>on. <00:01:05.875>And <00:01:06.050>as <00:01:06.225>an <00:01:06.399>application <00:01:06.575>developer,

18
00:01:08.355 --> 00:01:11.815
<00:01:08.355>you're <00:01:08.455>used <00:01:08.555>to <00:01:08.655>these <00:01:08.755>patterns <00:01:08.855>and <00:01:08.955>the <00:01:09.055>importance <00:01:09.155>of <00:01:09.255>each <00:01:09.355>of <00:01:09.455>these <00:01:09.555>parts <00:01:09.655>of <00:01:09.755>the

19
00:01:11.815 --> 00:01:13.895
<00:01:11.815>pattern. <00:01:12.281>As <00:01:12.748>a <00:01:13.215>developer,

20
00:01:13.895 --> 00:01:18.015
<00:01:13.895>I'm <00:01:14.002>also <00:01:14.110>aware <00:01:14.218>that <00:01:14.325>we <00:01:14.433>need <00:01:14.541>a <00:01:14.648>database <00:01:14.756>and <00:01:14.864>we <00:01:14.971>tend <00:01:15.079>to <00:01:15.187>give <00:01:15.295>it

21
00:01:18.565 --> 00:01:22.535
<00:01:18.565>scanned <00:01:18.720>thought. <00:01:18.876>Typically, <00:01:19.031>the <00:01:19.187>database <00:01:19.342>is, <00:01:19.498>it's <00:01:19.653>a <00:01:19.809>necessary <00:01:19.965>evil.

22
00:01:22.535 --> 00:01:24.615
<00:01:22.535>It's <00:01:22.662>something <00:01:22.789>that's <00:01:22.916>going <00:01:23.044>to <00:01:23.171>store <00:01:23.298>the <00:01:23.425>data <00:01:23.553>and <00:01:23.680>hold <00:01:23.807>the <00:01:23.935>data,

23
00:01:24.995 --> 00:01:27.455
<00:01:24.995>but <00:01:25.150>it's <00:01:25.306>not <00:01:25.461>super <00:01:25.617>interesting <00:01:25.772>to <00:01:25.928>us <00:01:26.083>'cause <00:01:26.239>we're <00:01:26.395>developers,

24
00:01:27.455 --> 00:01:30.335
<00:01:27.455>we <00:01:27.595>want <00:01:27.735>to <00:01:27.875>write <00:01:28.015>fancy <00:01:28.155>front <00:01:28.295>ends <00:01:28.435>or <00:01:28.575>really <00:01:28.715>cool <00:01:28.855>microservices.

25
00:01:31.115 --> 00:01:32.175
<00:01:31.115>But <00:01:32.069>fundamentally,

26
00:01:32.175 --> 00:01:35.855
<00:01:32.175>that <00:01:32.302>database <00:01:32.429>is <00:01:32.556>incredibly <00:01:32.684>important <00:01:32.811>and <00:01:32.938>in <00:01:33.065>the <00:01:33.193>world <00:01:33.320>we <00:01:33.447>live <00:01:33.575>in,

27
00:01:36.125 --> 00:01:39.735
<00:01:36.125>that <00:01:36.300>database <00:01:36.475>is <00:01:36.650>get <00:01:36.825>becoming <00:01:37.000>more <00:01:37.175>and <00:01:37.350>more <00:01:37.525>important.

28
00:01:41.715 --> 00:01:45.935
<00:01:41.715>So <00:01:41.842>we <00:01:41.969>live <00:01:42.096>in <00:01:42.224>a <00:01:42.351>world <00:01:42.478>where <00:01:42.605>more <00:01:42.733>data <00:01:42.860>equals <00:01:42.987>better <00:01:43.115>results.

29
00:01:46.435 --> 00:01:50.855
<00:01:46.435>As <00:01:46.535>we're <00:01:46.635>moving <00:01:46.735>into <00:01:46.835>the <00:01:46.935>AI <00:01:47.035>paradigm <00:01:47.135>more <00:01:47.235>and <00:01:47.335>more <00:01:47.435>we <00:01:47.535>find <00:01:47.635>that <00:01:47.735>the <00:01:47.835>better

30
00:01:50.965 --> 00:01:52.855
<00:01:50.965>results <00:01:51.315>come <00:01:51.665>from <00:01:52.015>more <00:01:52.365>data.

31
00:01:53.195 --> 00:01:56.535
<00:01:53.195>Now <00:01:53.369>these <00:01:53.544>are <00:01:53.720>some <00:01:53.895>quotes <00:01:54.070>from <00:01:54.244>very <00:01:54.419>large <00:01:54.595>companies.

32
00:01:56.595 --> 00:02:00.135
<00:01:56.595>So <00:01:56.770>Google's <00:01:56.945>research <00:01:57.120>director, <00:01:57.295>Peter <00:01:57.470>Norvig, <00:01:57.645>said <00:01:57.820>things <00:01:57.995>like,

33
00:02:00.715 --> 00:02:05.655
<00:02:00.715>we <00:02:00.855>don't <00:02:00.995>have <00:02:01.135>better <00:02:01.275>algorithms, <00:02:01.415>we <00:02:01.555>have <00:02:01.695>more <00:02:01.835>data, <00:02:01.975>simple <00:02:02.115>models,

34
00:02:05.875 --> 00:02:10.055
<00:02:05.875>and <00:02:05.991>a <00:02:06.108>lot <00:02:06.225>of <00:02:06.341>data. <00:02:06.458>Trump <00:02:06.575>more <00:02:06.691>elaborate <00:02:06.808>models <00:02:06.925>based <00:02:07.041>on <00:02:07.158>fewer <00:02:07.275>data.

35
00:02:11.965 --> 00:02:13.625
<00:02:11.965>That's <00:02:12.665>about <00:02:13.365>analysis.

36
00:02:13.625 --> 00:02:16.545
<00:02:13.625>So <00:02:13.765>that's <00:02:13.905>about <00:02:14.045>the <00:02:14.185>data <00:02:14.325>that <00:02:14.465>we're <00:02:14.605>using <00:02:14.745>to <00:02:14.885>train <00:02:15.025>models.

37
00:02:16.925 --> 00:02:19.865
<00:02:16.925>The <00:02:17.052>more <00:02:17.179>data <00:02:17.306>we <00:02:17.434>have, <00:02:17.561>the <00:02:17.688>better <00:02:17.815>the <00:02:17.943>training <00:02:18.070>we <00:02:18.197>can <00:02:18.325>get.

38
00:02:20.215 --> 00:02:21.905
<00:02:20.215>What <00:02:20.681>about <00:02:21.148>real-time <00:02:21.615>decisioning?

39
00:02:21.905 --> 00:02:24.905
<00:02:21.905>What <00:02:21.998>if <00:02:22.091>I <00:02:22.185>want <00:02:22.278>to <00:02:22.371>load <00:02:22.465>that <00:02:22.558>data <00:02:22.651>in <00:02:22.745>real <00:02:22.838>time <00:02:22.931>and <00:02:23.025>make <00:02:23.118>a <00:02:23.211>real-time <00:02:23.305>decision?

40
00:02:25.935 --> 00:02:28.625
<00:02:25.935>Well, <00:02:26.110>if <00:02:26.285>we <00:02:26.460>look <00:02:26.635>at <00:02:26.810>PayPal, <00:02:26.985>PayPal <00:02:27.160>is <00:02:27.335>very,

41
00:02:28.625 --> 00:02:32.345
<00:02:28.625>very <00:02:28.752>advanced <00:02:28.879>in <00:02:29.006>their <00:02:29.134>use <00:02:29.261>of <00:02:29.388>fraud <00:02:29.515>detection <00:02:29.643>through <00:02:29.770>neural <00:02:29.897>nets. <00:02:30.025>Um,

42
00:02:32.445 --> 00:02:34.225
<00:02:32.445>and <00:02:32.725>they <00:02:33.005>are <00:02:33.285>pioneering <00:02:33.565>the <00:02:33.845>way.

43
00:02:34.525 --> 00:02:39.425
<00:02:34.525>And <00:02:34.652>when <00:02:34.779>they <00:02:34.906>decide <00:02:35.034>if <00:02:35.161>a <00:02:35.288>transaction <00:02:35.415>that <00:02:35.543>you're <00:02:35.670>doing <00:02:35.797>is <00:02:35.925>fraudulent

44
00:02:39.425 --> 00:02:41.705
<00:02:39.425>or <00:02:39.580>not, <00:02:39.736>they <00:02:39.891>need <00:02:40.047>to <00:02:40.202>load <00:02:40.358>a <00:02:40.513>lot <00:02:40.669>of <00:02:40.825>data.

45
00:02:41.845 --> 00:02:44.305
<00:02:41.845>The <00:02:41.984>more <00:02:42.125>data <00:02:42.265>they <00:02:42.405>can <00:02:42.545>load <00:02:42.685>in <00:02:42.825>the <00:02:42.965>same <00:02:43.105>time <00:02:43.245>period,

46
00:02:44.305 --> 00:02:45.705
<00:02:44.305>the <00:02:44.515>better <00:02:44.725>the <00:02:44.935>result <00:02:45.144>they <00:02:45.355>can <00:02:45.565>get.

47
00:02:46.045 --> 00:02:47.945
<00:02:46.045>So <00:02:46.172>you <00:02:46.299>can <00:02:46.426>see <00:02:46.554>some <00:02:46.681>of <00:02:46.808>the <00:02:46.935>dimensions <00:02:47.063>are <00:02:47.190>on <00:02:47.317>the <00:02:47.445>screen,

48
00:02:47.945 --> 00:02:50.145
<00:02:47.945>things <00:02:48.120>like <00:02:48.295>they <00:02:48.470>don't <00:02:48.644>just <00:02:48.820>look <00:02:48.995>at <00:02:49.170>transaction <00:02:49.345>history,

49
00:02:50.175 --> 00:02:54.665
<00:02:50.175>it's <00:02:50.375>device <00:02:50.575>information, <00:02:50.775>email <00:02:50.975>accounts, <00:02:51.175>um, <00:02:51.375>history, <00:02:51.575>um,

50
00:02:55.025 --> 00:02:57.705
<00:02:55.025>identity <00:02:55.200>scores <00:02:55.375>across <00:02:55.550>different <00:02:55.725>browsers <00:02:55.900>and <00:02:56.075>things <00:02:56.250>like <00:02:56.425>that.

51
00:02:58.165 --> 00:03:00.925
<00:02:58.165>So <00:02:58.281>there's <00:02:58.398>a <00:02:58.515>lot <00:02:58.631>of <00:02:58.748>information <00:02:58.864>and <00:02:58.981>the <00:02:59.098>more <00:02:59.215>information <00:02:59.331>they <00:02:59.448>can <00:02:59.565>get,

52
00:03:01.225 --> 00:03:02.845
<00:03:01.225>the <00:03:01.424>better <00:03:01.625>result <00:03:01.825>they <00:03:02.025>can <00:03:02.225>give <00:03:02.424>in <00:03:02.625>fraud.

53
00:03:04.695 --> 00:03:06.755
<00:03:04.695>If <00:03:04.928>we're <00:03:05.161>talking <00:03:05.394>about <00:03:05.628>financial <00:03:05.861>services <00:03:06.095>industries,

54
00:03:06.905 --> 00:03:11.555
<00:03:06.905>there's <00:03:07.032>a <00:03:07.159>lot <00:03:07.286>of <00:03:07.414>places <00:03:07.541>where <00:03:07.668>these <00:03:07.795>real-time <00:03:07.923>decisions <00:03:08.050>that <00:03:08.177>require <00:03:08.305>vast

55
00:03:11.555 --> 00:03:15.625
<00:03:11.555>amounts <00:03:11.682>of <00:03:11.809>data <00:03:11.936>are <00:03:12.064>very <00:03:12.191>common. <00:03:12.318>So <00:03:12.445>we <00:03:12.573>spoke <00:03:12.700>about <00:03:12.827>fraud <00:03:12.955>detection.

56
00:03:15.625 --> 00:03:16.985
<00:03:15.625>Credit <00:03:15.799>card <00:03:15.974>fraud <00:03:16.149>is <00:03:16.324>a <00:03:16.499>very <00:03:16.674>obvious <00:03:16.849>one.

57
00:03:16.985 --> 00:03:19.585
<00:03:16.985>It's <00:03:17.112>going <00:03:17.239>to <00:03:17.366>be <00:03:17.494>the <00:03:17.621>focus <00:03:17.748>of <00:03:17.875>what <00:03:18.003>I'm <00:03:18.130>talking <00:03:18.257>about <00:03:18.385>today,

58
00:03:19.965 --> 00:03:24.105
<00:03:19.965>but <00:03:20.058>it's <00:03:20.151>really <00:03:20.245>not <00:03:20.338>the <00:03:20.431>only <00:03:20.525>place <00:03:20.618>in <00:03:20.711>FSIS <00:03:20.805>where <00:03:20.898>you <00:03:20.991>find <00:03:21.085>the <00:03:21.178>need <00:03:21.271>for <00:03:21.365>real-time

59
00:03:24.135 --> 00:03:29.065
<00:03:24.135>data. <00:03:24.251>If <00:03:24.368>we <00:03:24.484>look <00:03:24.601>at <00:03:24.718>risk <00:03:24.834>management <00:03:24.951>and <00:03:25.068>assessment, <00:03:25.185>um, <00:03:25.301>there's <00:03:25.418>a <00:03:25.535>part,

60
00:03:29.065 --> 00:03:33.345
<00:03:29.065>is <00:03:29.204>a <00:03:29.345>particular <00:03:29.484>trade <00:03:29.625>risky <00:03:29.765>in <00:03:29.905>a <00:03:30.045>stock <00:03:30.185>trading <00:03:30.325>application? <00:03:30.465>Um,

61
00:03:33.645 --> 00:03:35.945
<00:03:33.645>you <00:03:33.800>want <00:03:33.956>to <00:03:34.111>evaluate <00:03:34.267>that <00:03:34.422>in <00:03:34.578>real <00:03:34.733>time. <00:03:34.889>What <00:03:35.045>is,

62
00:03:36.365 --> 00:03:40.825
<00:03:36.365>can <00:03:36.492>we <00:03:36.619>help <00:03:36.746>people <00:03:36.874>make <00:03:37.001>better <00:03:37.128>decisions <00:03:37.255>with <00:03:37.383>more <00:03:37.510>data <00:03:37.637>based <00:03:37.765>on

63
00:03:40.825 --> 00:03:43.405
<00:03:40.825>historical <00:03:41.524>trends? <00:03:42.225>Compliance?

64
00:03:43.865 --> 00:03:48.505
<00:03:43.865>If <00:03:44.040>I'm <00:03:44.215>a <00:03:44.390>margin <00:03:44.565>lending <00:03:44.740>company, <00:03:44.915>I <00:03:45.090>can't, <00:03:45.265>um,

65
00:03:48.505 --> 00:03:52.385
<00:03:48.505>legally <00:03:48.644>lend <00:03:48.785>margin <00:03:48.924>lending <00:03:49.065>in <00:03:49.204>the <00:03:49.345>United <00:03:49.484>States <00:03:49.625>on <00:03:49.765>penny <00:03:49.905>stocks,

66
00:03:53.445 --> 00:03:57.395
<00:03:53.445>but <00:03:53.584>if <00:03:53.725>I'm <00:03:53.864>doing <00:03:54.005>my <00:03:54.144>validation <00:03:54.285>on <00:03:54.424>that <00:03:54.565>requirement <00:03:54.704>through <00:03:54.845>say,

67
00:03:57.475 --> 00:04:01.035
<00:03:57.475>a <00:03:57.591>batch <00:03:57.708>job <00:03:57.825>on <00:03:57.941>the <00:03:58.058>mainframe <00:03:58.174>that <00:03:58.291>only <00:03:58.408>runs <00:03:58.525>once <00:03:58.641>every <00:03:58.758>24 <00:03:58.875>hours,

68
00:04:01.335 --> 00:04:05.795
<00:04:01.335>it <00:04:01.435>enables <00:04:01.535>people <00:04:01.635>to <00:04:01.735>do <00:04:01.835>margin <00:04:01.935>lending <00:04:02.035>on <00:04:02.135>penny <00:04:02.235>stocks <00:04:02.335>early <00:04:02.435>in <00:04:02.535>the <00:04:02.635>day <00:04:02.735>and

69
00:04:05.795 --> 00:04:09.035
<00:04:05.795>trade <00:04:05.922>and <00:04:06.049>sell <00:04:06.176>them <00:04:06.304>late <00:04:06.431>in <00:04:06.558>the <00:04:06.685>day <00:04:06.813>and <00:04:06.940>violate <00:04:07.067>that <00:04:07.195>compliance.

70
00:04:09.415 --> 00:04:12.515
<00:04:09.415>You <00:04:09.508>want <00:04:09.601>to <00:04:09.695>be <00:04:09.788>able <00:04:09.881>to <00:04:09.975>do <00:04:10.068>that <00:04:10.161>sort <00:04:10.255>of <00:04:10.348>compliance <00:04:10.441>far <00:04:10.535>more <00:04:10.628>frequently <00:04:10.721>than <00:04:10.815>what

71
00:04:12.515 --> 00:04:16.075
<00:04:12.515>we <00:04:12.654>are <00:04:12.795>typically <00:04:12.934>used <00:04:13.075>to <00:04:13.214>with <00:04:13.355>batch <00:04:13.494>processes <00:04:13.635>and <00:04:13.774>so <00:04:13.915>on.

72
00:04:16.075 --> 00:04:20.635
<00:04:16.075>There's <00:04:16.168>a <00:04:16.261>good <00:04:16.354>number <00:04:16.448>of <00:04:16.541>these <00:04:16.635>places <00:04:16.728>where <00:04:16.821>we <00:04:16.914>have <00:04:17.008>to <00:04:17.101>be <00:04:17.195>able <00:04:17.288>to <00:04:17.381>make <00:04:17.474>real-time

73
00:04:20.835 --> 00:04:23.235
<00:04:20.834>decisions. <00:04:21.034>And <00:04:21.234>when <00:04:21.435>you <00:04:21.635>make <00:04:21.834>those <00:04:22.034>real-time <00:04:22.234>decisions,

74
00:04:23.975 --> 00:04:27.915
<00:04:23.975>the <00:04:24.075>more <00:04:24.175>data <00:04:24.275>you <00:04:24.375>can <00:04:24.475>load <00:04:24.575>in <00:04:24.675>the <00:04:24.775>same <00:04:24.875>time <00:04:24.975>period, <00:04:25.075>the <00:04:25.175>better <00:04:25.275>the <00:04:25.375>results.

75
00:04:27.915 --> 00:04:31.835
<00:04:27.915>And <00:04:28.042>if <00:04:28.169>you <00:04:28.296>can <00:04:28.424>load <00:04:28.551>them <00:04:28.678>faster, <00:04:28.805>then <00:04:28.933>your <00:04:29.060>analysis, <00:04:29.187>your <00:04:29.315>um,

76
00:04:32.135 --> 00:04:36.315
<00:04:32.135>AI <00:04:32.217>models <00:04:32.299>that <00:04:32.382>you <00:04:32.464>can <00:04:32.546>apply <00:04:32.629>in <00:04:32.711>real <00:04:32.793>time <00:04:32.876>have <00:04:32.958>more <00:04:33.040>time <00:04:33.123>to <00:04:33.205>run <00:04:33.287>so <00:04:33.370>you <00:04:33.452>can <00:04:33.534>make

77
00:04:36.315 --> 00:04:39.795
<00:04:36.315>them <00:04:36.442>more <00:04:36.569>sophisticated <00:04:36.696>and <00:04:36.824>that <00:04:36.951>gives <00:04:37.078>you <00:04:37.205>better <00:04:37.333>results <00:04:37.460>on <00:04:37.587>your <00:04:37.715>data.

78
00:04:41.835 --> 00:04:45.885
<00:04:41.835>It's <00:04:41.951>not <00:04:42.068>just <00:04:42.185>emphasized <00:04:42.301>though, <00:04:42.418>this <00:04:42.534>trend <00:04:42.651>of <00:04:42.768>needing <00:04:42.885>more <00:04:43.001>and <00:04:43.118>more <00:04:43.234>data,

79
00:04:46.535 --> 00:04:51.045
<00:04:46.534>being <00:04:46.635>able <00:04:46.734>to <00:04:46.835>load <00:04:46.934>it <00:04:47.034>in <00:04:47.135>real <00:04:47.234>time <00:04:47.335>to <00:04:47.434>make <00:04:47.534>decisions <00:04:47.635>is <00:04:47.734>fairly <00:04:47.835>ubiquitous <00:04:47.934>across

80
00:04:51.275 --> 00:04:53.445
<00:04:51.275>many <00:04:51.741>different <00:04:52.208>industry <00:04:52.674>verticals.

81
00:04:54.065 --> 00:04:58.485
<00:04:54.065>Almost <00:04:54.158>every <00:04:54.251>industry <00:04:54.344>vertical <00:04:54.438>has <00:04:54.531>a <00:04:54.625>need <00:04:54.718>for <00:04:54.811>I <00:04:54.905>need <00:04:54.998>to <00:04:55.091>make <00:04:55.185>a <00:04:55.278>decision <00:04:55.371>and <00:04:55.465>the

82
00:04:58.485 --> 00:05:00.405
<00:04:58.485>faster <00:04:58.685>I <00:04:58.885>can <00:04:59.085>make <00:04:59.285>that <00:04:59.485>decision, <00:04:59.685>the <00:04:59.885>better.

83
00:05:00.745 --> 00:05:04.285
<00:05:00.745>So <00:05:00.861>it <00:05:00.978>doesn't <00:05:01.095>really <00:05:01.211>matter <00:05:01.328>whether <00:05:01.445>we're <00:05:01.561>talking <00:05:01.678>FSIS <00:05:01.795>or <00:05:01.911>healthcare <00:05:02.028>or <00:05:02.145>sports

84
00:05:04.345 --> 00:05:05.178
<00:05:04.345>or <00:05:05.094>retails.

85
00:05:05.255 --> 00:05:09.765
<00:05:05.255>There <00:05:05.362>are <00:05:05.470>very <00:05:05.578>valid <00:05:05.685>reasons <00:05:05.793>that <00:05:05.901>we <00:05:06.008>need <00:05:06.116>to <00:05:06.224>make <00:05:06.331>that <00:05:06.439>decision <00:05:06.547>really <00:05:06.655>quickly.

86
00:05:10.385 --> 00:05:14.965
<00:05:10.385>And <00:05:10.501>typically <00:05:10.618>the <00:05:10.735>databases <00:05:10.851>we've <00:05:10.968>been <00:05:11.085>using <00:05:11.201>historically <00:05:11.318>don't <00:05:11.435>cut <00:05:11.551>it <00:05:11.668>so <00:05:11.784>much.

87
00:05:15.065 --> 00:05:19.045
<00:05:15.065>So <00:05:15.165>I <00:05:15.265>wanna <00:05:15.365>talk <00:05:15.465>about <00:05:15.565>some <00:05:15.665>patterns <00:05:15.765>we're <00:05:15.865>using <00:05:15.965>and <00:05:16.065>the <00:05:16.165>sort <00:05:16.265>of <00:05:16.365>databases <00:05:16.465>that

88
00:05:19.045 --> 00:05:21.365
<00:05:19.045>you <00:05:19.172>might <00:05:19.299>use <00:05:19.426>to <00:05:19.554>make <00:05:19.681>these <00:05:19.808>sort <00:05:19.935>of <00:05:20.063>decisions <00:05:20.190>in <00:05:20.317>real <00:05:20.445>time.

89
00:05:24.745 --> 00:05:26.435
<00:05:24.745>When <00:05:25.095>we <00:05:25.445>look <00:05:25.795>at <00:05:26.145>systems,

90
00:05:27.255 --> 00:05:30.795
<00:05:27.255>we <00:05:27.371>typically <00:05:27.488>find <00:05:27.605>that <00:05:27.721>people <00:05:27.838>will <00:05:27.955>measure <00:05:28.071>latency <00:05:28.188>and <00:05:28.305>they'll <00:05:28.421>talk <00:05:28.538>about <00:05:28.655>the

91
00:05:30.795 --> 00:05:31.955
<00:05:30.795>average <00:05:31.839>latency.

92
00:05:32.695 --> 00:05:37.475
<00:05:32.695>The <00:05:32.895>average <00:05:33.094>latency <00:05:33.295>basically <00:05:33.495>says <00:05:33.695>half <00:05:33.895>my <00:05:34.094>customers

93
00:05:37.475 --> 00:05:41.435
<00:05:37.475>will <00:05:37.591>receive <00:05:37.708>this <00:05:37.825>average <00:05:37.941>latency. <00:05:38.058>The <00:05:38.175>other <00:05:38.291>half <00:05:38.408>will <00:05:38.525>go <00:05:38.641>above <00:05:38.758>that <00:05:38.875>latency.

94
00:05:41.895 --> 00:05:45.915
<00:05:41.895>So <00:05:42.011>if <00:05:42.128>we <00:05:42.245>say, <00:05:42.361>I <00:05:42.478>want <00:05:42.594>an <00:05:42.711>average <00:05:42.828>latency <00:05:42.945>of <00:05:43.061>10 <00:05:43.178>milliseconds <00:05:43.294>and

95
00:05:47.875 --> 00:05:50.855
<00:05:47.875>my <00:05:48.155>99 <00:05:48.435>percentile <00:05:48.715>is <00:05:48.995>one <00:05:49.275>second,

96
00:05:51.905 --> 00:05:55.595
<00:05:51.905>sure <00:05:52.060>50% <00:05:52.216>of <00:05:52.371>my <00:05:52.527>users <00:05:52.682>have <00:05:52.838>got <00:05:52.993>under <00:05:53.149>10 <00:05:53.304>milliseconds,

97
00:05:55.895 --> 00:05:59.445
<00:05:55.895>but <00:05:56.011>those <00:05:56.128>people <00:05:56.245>who <00:05:56.361>have <00:05:56.478>gone <00:05:56.594>over <00:05:56.711>it <00:05:56.828>can <00:05:56.945>go <00:05:57.061>dramatically <00:05:57.178>over <00:05:57.294>it.

98
00:05:59.825 --> 00:06:02.125
<00:05:59.825>And <00:05:59.980>what <00:06:00.136>we <00:06:00.291>typically <00:06:00.447>find <00:06:00.602>when <00:06:00.758>we <00:06:00.913>talk <00:06:01.069>about <00:06:01.224>latency,

99
00:06:02.125 --> 00:06:03.645
<00:06:02.125>particularly <00:06:02.467>in <00:06:02.808>the <00:06:03.151>database <00:06:03.493>world,

100
00:06:04.845 --> 00:06:09.785
<00:06:04.845>the <00:06:04.961>importance <00:06:05.078>of <00:06:05.195>99% <00:06:05.311>or <00:06:05.428>99.9% <00:06:05.545>is <00:06:05.661>incredibly <00:06:05.778>high <00:06:05.895>because <00:06:06.011>you <00:06:06.128>get <00:06:06.245>this

101
00:06:09.785 --> 00:06:14.345
<00:06:09.785>hockey <00:06:09.912>stick <00:06:10.039>effect. <00:06:10.166>Where <00:06:10.294>as <00:06:10.421>we <00:06:10.548>go <00:06:10.675>up <00:06:10.803>in <00:06:10.930>those <00:06:11.057>percentile <00:06:11.185>ranges,

102
00:06:14.645 --> 00:06:19.105
<00:06:14.645>and <00:06:14.738>my <00:06:14.831>scale <00:06:14.924>on <00:06:15.018>this <00:06:15.111>chart <00:06:15.205>is <00:06:15.298>non-linear, <00:06:15.391>it's <00:06:15.484>gotta <00:06:15.578>be <00:06:15.671>said, <00:06:15.765>you <00:06:15.858>get <00:06:15.951>an <00:06:16.044>incre,

103
00:06:19.465 --> 00:06:24.345
<00:06:19.465>a <00:06:19.620>exponentially <00:06:19.776>high <00:06:19.931>increase <00:06:20.087>in <00:06:20.242>latency <00:06:20.398>and <00:06:20.553>that <00:06:20.709>is <00:06:20.864>really

104
00:06:24.575 --> 00:06:26.185
<00:06:24.575>hard <00:06:25.041>to <00:06:25.508>handle. <00:06:25.974>Now,

105
00:06:26.185 --> 00:06:30.065
<00:06:26.185>if <00:06:26.301>I'm <00:06:26.418>loading <00:06:26.535>lots <00:06:26.651>of <00:06:26.768>data <00:06:26.885>and <00:06:27.001>I'm <00:06:27.118>doing <00:06:27.235>a <00:06:27.351>realtime <00:06:27.468>fraud <00:06:27.585>detection,

106
00:06:30.065 --> 00:06:32.265
<00:06:30.065>for <00:06:30.220>example, <00:06:30.376>the <00:06:30.531>more <00:06:30.687>data <00:06:30.842>I <00:06:30.998>can <00:06:31.153>load <00:06:31.309>the <00:06:31.465>better.

107
00:06:32.645 --> 00:06:34.825
<00:06:32.645>But <00:06:32.800>if <00:06:32.956>I <00:06:33.111>load <00:06:33.267>each <00:06:33.422>of <00:06:33.578>those <00:06:33.733>pieces <00:06:33.889>of <00:06:34.044>data,

108
00:06:36.135 --> 00:06:40.785
<00:06:36.135>each <00:06:36.262>one <00:06:36.389>has <00:06:36.516>a <00:06:36.644>chance <00:06:36.771>of <00:06:36.898>hitting <00:06:37.025>that <00:06:37.153>99% <00:06:37.280>or <00:06:37.407>that <00:06:37.534>99.9%

109
00:06:41.325 --> 00:06:43.905
<00:06:41.325>and <00:06:41.480>that's <00:06:41.636>going <00:06:41.791>to <00:06:41.947>give <00:06:42.102>me <00:06:42.258>a <00:06:42.413>really <00:06:42.569>bad <00:06:42.724>result.

110
00:06:46.855 --> 00:06:50.315
<00:06:46.855>So <00:06:46.982>when <00:06:47.109>we <00:06:47.236>go <00:06:47.364>and <00:06:47.491>talk <00:06:47.618>about <00:06:47.745>analysis <00:06:47.873>of <00:06:48.000>systems <00:06:48.127>and <00:06:48.255>performance,

111
00:06:50.315 --> 00:06:54.515
<00:06:50.315>what <00:06:50.415>we <00:06:50.515>really <00:06:50.615>want <00:06:50.715>to <00:06:50.815>talk <00:06:50.915>about <00:06:51.015>is <00:06:51.115>the <00:06:51.215>95th <00:06:51.315>percentile <00:06:51.415>or <00:06:51.515>the <00:06:51.615>99th <00:06:51.715>percentile.

112
00:06:55.345 --> 00:06:57.115
<00:06:55.345>Well, <00:06:55.578>what <00:06:55.811>does <00:06:56.045>this <00:06:56.278>actually <00:06:56.511>mean? <00:06:56.745>Well,

113
00:06:57.335 --> 00:07:00.555
<00:06:57.335>the <00:06:57.474>99th <00:06:57.614>percentile <00:06:57.755>means <00:06:57.895>that <00:06:58.034>if <00:06:58.174>I <00:06:58.315>have <00:06:58.455>a <00:06:58.594>hundred <00:06:58.734>samples,

114
00:07:01.335 --> 00:07:05.915
<00:07:01.335>99 <00:07:01.462>of <00:07:01.589>those <00:07:01.716>a <00:07:01.844>hundred <00:07:01.971>samples <00:07:02.098>have <00:07:02.225>that <00:07:02.353>value <00:07:02.480>or <00:07:02.607>less <00:07:02.734>in

115
00:07:05.945 --> 00:07:10.475
<00:07:05.945>latency. <00:07:06.072>And <00:07:06.199>the <00:07:06.326>curves, <00:07:06.454>as <00:07:06.581>you <00:07:06.708>can <00:07:06.835>see, <00:07:06.963>um, <00:07:07.090>are <00:07:07.217>pretty <00:07:07.344>steep.

116
00:07:10.475 --> 00:07:15.115
<00:07:10.475>You <00:07:10.575>trying <00:07:10.675>to <00:07:10.775>get <00:07:10.875>up <00:07:10.975>to <00:07:11.075>that <00:07:11.175>a <00:07:11.275>hundred <00:07:11.375>percent <00:07:11.475>and <00:07:11.575>99% <00:07:11.675>is <00:07:11.775>pretty <00:07:11.875>close.

117
00:07:15.135 --> 00:07:18.475
<00:07:15.135>You <00:07:15.242>want, <00:07:15.350>you <00:07:15.458>want <00:07:15.565>all <00:07:15.673>your <00:07:15.781>customers <00:07:15.888>to <00:07:15.996>have <00:07:16.104>the <00:07:16.211>same <00:07:16.319>sort <00:07:16.427>of <00:07:16.534>experience.

118
00:07:19.855 --> 00:07:23.435
<00:07:19.855>So <00:07:19.971>how <00:07:20.088>do <00:07:20.205>we <00:07:20.321>find <00:07:20.438>out <00:07:20.555>what <00:07:20.671>the <00:07:20.788>99th <00:07:20.905>percentile <00:07:21.021>is? <00:07:21.138>I <00:07:21.255>mean,

119
00:07:23.435 --> 00:07:25.875
<00:07:23.435>it's <00:07:23.562>easy <00:07:23.689>to <00:07:23.816>measure <00:07:23.944>the <00:07:24.071>average, <00:07:24.198>it's <00:07:24.325>easy <00:07:24.453>to <00:07:24.580>measure <00:07:24.707>the <00:07:24.835>max,

120
00:07:26.215 --> 00:07:29.355
<00:07:26.215>but <00:07:26.370>to <00:07:26.526>measure <00:07:26.681>the <00:07:26.837>99th <00:07:26.992>percentile <00:07:27.148>or <00:07:27.303>the <00:07:27.459>95th <00:07:27.614>percentile,

121
00:07:29.465 --> 00:07:31.755
<00:07:29.465>typically <00:07:29.620>what <00:07:29.776>you <00:07:29.931>have <00:07:30.087>to <00:07:30.242>do <00:07:30.398>is <00:07:30.553>get <00:07:30.709>your <00:07:30.864>results,

122
00:07:32.465 --> 00:07:36.395
<00:07:32.465>sort <00:07:32.640>them <00:07:32.815>by <00:07:32.990>time <00:07:33.165>and <00:07:33.340>take <00:07:33.515>the <00:07:33.690>99th <00:07:33.865>percent.

123
00:07:36.455 --> 00:07:37.675
<00:07:36.455>So <00:07:36.638>if <00:07:36.820>I've <00:07:37.004>got <00:07:37.187>a <00:07:37.370>thousand <00:07:37.553>samples,

124
00:07:38.115 --> 00:07:42.635
<00:07:38.115>I <00:07:38.215>want <00:07:38.315>to <00:07:38.415>read <00:07:38.515>the <00:07:38.615>990th <00:07:38.715>and <00:07:38.815>that'll <00:07:38.915>be <00:07:39.015>my <00:07:39.115>be <00:07:39.215>my <00:07:39.315>99th <00:07:39.415>percent. <00:07:39.515>Um,

125
00:07:42.775 --> 00:07:47.195
<00:07:42.775>and <00:07:42.902>the <00:07:43.029>value <00:07:43.156>at <00:07:43.284>that <00:07:43.411>sample <00:07:43.538>will <00:07:43.665>be <00:07:43.793>that <00:07:43.920>my <00:07:44.047>99 <00:07:44.174>percentile,

126
00:07:47.825 --> 00:07:49.595
<00:07:47.825>that <00:07:48.058>works <00:07:48.291>really <00:07:48.525>well <00:07:48.758>for <00:07:48.991>small <00:07:49.224>datasets,

127
00:07:50.215 --> 00:07:54.275
<00:07:50.215>but <00:07:50.342>for <00:07:50.469>large <00:07:50.596>data <00:07:50.724>sets <00:07:50.851>where <00:07:50.978>we're <00:07:51.105>measuring <00:07:51.233>hundreds <00:07:51.360>of <00:07:51.487>thousands <00:07:51.615>of

128
00:07:54.275 --> 00:07:56.035
<00:07:54.275>transactions <00:07:54.508>a <00:07:54.741>second <00:07:54.974>or <00:07:55.208>samples <00:07:55.441>a <00:07:55.674>second,

129
00:07:56.665 --> 00:07:59.155
<00:07:56.665>that <00:07:56.898>sorting <00:07:57.131>that <00:07:57.365>cost <00:07:57.598>becomes <00:07:57.831>really <00:07:58.065>high.

130
00:08:00.825 --> 00:08:04.405
<00:08:00.825>So <00:08:00.952>when <00:08:01.079>I'm <00:08:01.206>talking <00:08:01.334>about <00:08:01.461>99 <00:08:01.588>or <00:08:01.715>95th <00:08:01.843>percentile <00:08:01.970>in <00:08:02.097>this <00:08:02.224>presentation,

131
00:08:04.595 --> 00:08:09.245
<00:08:04.595>typically <00:08:04.735>what <00:08:04.875>I've <00:08:05.015>done <00:08:05.155>is <00:08:05.295>I've <00:08:05.435>applied <00:08:05.575>a <00:08:05.715>mathematical <00:08:05.855>model <00:08:05.995>where

132
00:08:09.255 --> 00:08:13.885
<00:08:09.255>we're <00:08:09.395>effectively <00:08:09.534>bucketing <00:08:09.675>and <00:08:09.815>performing <00:08:09.955>linear <00:08:10.094>regression <00:08:10.235>of <00:08:10.375>my <00:08:10.515>samples <00:08:10.655>so

133
00:08:13.885 --> 00:08:18.605
<00:08:13.885>that <00:08:13.972>I <00:08:14.060>don't <00:08:14.147>have <00:08:14.235>to <00:08:14.322>sort <00:08:14.409>the <00:08:14.497>data. <00:08:14.585>I <00:08:14.672>measure <00:08:14.760>something <00:08:14.847>I <00:08:14.935>put <00:08:15.022>into <00:08:15.110>a <00:08:15.197>bucket. <00:08:15.284>Um,

134
00:08:18.655 --> 00:08:21.325
<00:08:18.655>those <00:08:18.782>buckets <00:08:18.909>were <00:08:19.036>separated <00:08:19.164>by <00:08:19.291>powers <00:08:19.418>of <00:08:19.545>two. <00:08:19.673>So <00:08:19.800>in <00:08:19.927>my <00:08:20.054>case,

135
00:08:21.505 --> 00:08:25.285
<00:08:21.505>my <00:08:21.621>smallest <00:08:21.738>bucket <00:08:21.855>was <00:08:21.971>about <00:08:22.088>a <00:08:22.205>hundred <00:08:22.321>microseconds. <00:08:22.438>Then <00:08:22.555>it <00:08:22.671>went <00:08:22.788>to, <00:08:22.905>um,

136
00:08:25.405 --> 00:08:27.885
<00:08:25.405>a <00:08:25.684>hundred <00:08:25.965>microseconds <00:08:26.244>times <00:08:26.525>power <00:08:26.804>route,

137
00:08:27.905 --> 00:08:30.685
<00:08:27.905>two <00:08:28.060>times <00:08:28.216>power <00:08:28.371>of <00:08:28.527>route <00:08:28.682>two <00:08:28.838>again <00:08:28.993>and <00:08:29.149>so <00:08:29.304>on.

138
00:08:30.685 --> 00:08:34.685
<00:08:30.685>So <00:08:30.778>each <00:08:30.871>bucket <00:08:30.965>is <00:08:31.058>power <00:08:31.151>of <00:08:31.245>route <00:08:31.338>two <00:08:31.431>greater <00:08:31.525>than <00:08:31.618>I <00:08:31.711>could <00:08:31.805>have <00:08:31.898>just <00:08:31.991>doubled <00:08:32.085>the

139
00:08:34.685 --> 00:08:35.265
buckets.

140
00:08:35.265 --> 00:08:38.525
<00:08:35.265>And <00:08:35.352>you <00:08:35.439>can <00:08:35.527>see <00:08:35.615>on <00:08:35.702>this <00:08:35.789>graph <00:08:35.877>I've <00:08:35.965>got <00:08:36.052>that <00:08:36.140>blue <00:08:36.227>line <00:08:36.314>which <00:08:36.402>shows <00:08:36.490>the <00:08:36.577>effect <00:08:36.664>of

141
00:08:38.725 --> 00:08:39.555
<00:08:38.725>doubling <00:08:39.098>the <00:08:39.472>buckets.

142
00:08:39.555 --> 00:08:44.045
<00:08:39.554>It's <00:08:39.655>a <00:08:39.755>very <00:08:39.854>core <00:08:39.954>screened <00:08:40.054>effect <00:08:40.155>and <00:08:40.255>it <00:08:40.354>means <00:08:40.454>you <00:08:40.554>get <00:08:40.655>more <00:08:40.755>inaccurate <00:08:40.854>results <00:08:40.954>by

143
00:08:44.045 --> 00:08:47.125
<00:08:44.044>using <00:08:44.200>the <00:08:44.356>Route <00:08:44.511>two <00:08:44.667>powers. <00:08:44.822>I <00:08:44.978>get <00:08:45.133>the <00:08:45.289>green <00:08:45.444>line,

144
00:08:47.375 --> 00:08:49.165
<00:08:47.375>which <00:08:47.655>isn't <00:08:47.935>perfectly <00:08:48.215>accurate, <00:08:48.495>but <00:08:48.775>it's,

145
00:08:49.165 --> 00:08:52.085
<00:08:49.165>it's <00:08:49.281>a <00:08:49.398>very <00:08:49.515>good <00:08:49.631>approximation <00:08:49.748>of <00:08:49.865>that <00:08:49.981>true <00:08:50.098>curve <00:08:50.214>we <00:08:50.331>want <00:08:50.448>to <00:08:50.564>get.

146
00:08:55.225 --> 00:08:58.485
<00:08:55.225>So <00:08:55.341>let's <00:08:55.458>talk <00:08:55.575>about <00:08:55.691>databases <00:08:55.808>and <00:08:55.925>how <00:08:56.041>we're <00:08:56.158>going <00:08:56.275>to <00:08:56.391>model <00:08:56.508>the <00:08:56.625>information.

147
00:08:58.915 --> 00:09:01.565
<00:08:58.915>There's <00:08:59.031>two <00:08:59.148>different <00:08:59.265>sorts <00:08:59.381>of <00:08:59.498>databases <00:08:59.615>out <00:08:59.731>in <00:08:59.848>the <00:08:59.964>world <00:09:00.081>at <00:09:00.198>the <00:09:00.314>moment.

148
00:09:01.665 --> 00:09:05.645
<00:09:01.665>The <00:09:01.820>no <00:09:01.976>SQL <00:09:02.131>databases <00:09:02.287>and <00:09:02.442>the <00:09:02.598>SQL <00:09:02.753>databases <00:09:02.909>as <00:09:03.064>developers,

149
00:09:05.745 --> 00:09:08.885
<00:09:05.745>almost <00:09:05.872>all <00:09:05.999>of <00:09:06.126>us <00:09:06.254>are <00:09:06.381>relat, <00:09:06.508>uh, <00:09:06.635>used <00:09:06.763>to <00:09:06.890>that <00:09:07.017>relational <00:09:07.145>database,

150
00:09:08.885 --> 00:09:13.805
<00:09:08.885>the <00:09:08.992>SQL <00:09:09.100>databases. <00:09:09.208>Some <00:09:09.315>of <00:09:09.423>us <00:09:09.531>have, <00:09:09.638>um, <00:09:09.746>worked <00:09:09.854>with <00:09:09.961>the <00:09:10.069>no <00:09:10.177>SQL <00:09:10.285>databases.

151
00:09:14.275 --> 00:09:17.645
<00:09:14.275>I've <00:09:14.449>used <00:09:14.625>both <00:09:14.800>relational <00:09:14.975>and <00:09:15.150>NoSQL <00:09:15.324>database <00:09:15.500>fairly <00:09:15.675>heavily.

152
00:09:17.905 --> 00:09:21.125
<00:09:17.905>And <00:09:18.005>I <00:09:18.105>want <00:09:18.204>to <00:09:18.305>spend <00:09:18.405>a <00:09:18.505>little <00:09:18.605>bit <00:09:18.704>of <00:09:18.805>time <00:09:18.905>comparing <00:09:19.005>and <00:09:19.105>contrasting <00:09:19.204>the <00:09:19.305>two.

153
00:09:21.675 --> 00:09:23.765
<00:09:21.675>There's <00:09:21.908>some <00:09:22.141>terminology <00:09:22.375>that <00:09:22.608>we <00:09:22.841>find <00:09:23.074>different.

154
00:09:25.225 --> 00:09:28.445
<00:09:25.225>So <00:09:25.365>in <00:09:25.505>our <00:09:25.645>relational <00:09:25.785>model, <00:09:25.925>we <00:09:26.065>have <00:09:26.205>the <00:09:26.345>concept <00:09:26.485>of <00:09:26.625>database.

155
00:09:28.965 --> 00:09:32.685
<00:09:28.965>A <00:09:29.120>database <00:09:29.276>is <00:09:29.431>a <00:09:29.587>logical <00:09:29.742>grouping <00:09:29.898>of <00:09:30.053>entity, <00:09:30.209>um, <00:09:30.365>entity.

156
00:09:32.685 --> 00:09:35.685
<00:09:32.685>So <00:09:32.812>things <00:09:32.939>like <00:09:33.066>customers <00:09:33.194>and <00:09:33.321>accounts <00:09:33.448>will <00:09:33.575>typically <00:09:33.703>fall <00:09:33.830>into <00:09:33.957>a <00:09:34.084>single

157
00:09:35.965 --> 00:09:39.045
<00:09:35.965>database. <00:09:36.198>Inside <00:09:36.431>that <00:09:36.665>database <00:09:36.898>we <00:09:37.131>have <00:09:37.365>tables.

158
00:09:39.485 --> 00:09:42.085
<00:09:39.485>A <00:09:39.640>table <00:09:39.796>is <00:09:39.951>a <00:09:40.107>logical <00:09:40.262>grouping <00:09:40.418>of <00:09:40.573>a <00:09:40.729>single <00:09:40.885>entity.

159
00:09:42.105 --> 00:09:44.445
<00:09:42.105>So <00:09:42.221>it <00:09:42.338>might <00:09:42.455>be <00:09:42.571>an <00:09:42.688>account <00:09:42.805>table, <00:09:42.921>it <00:09:43.038>might <00:09:43.155>be <00:09:43.271>a <00:09:43.388>customer <00:09:43.505>table,

160
00:09:44.505 --> 00:09:45.805
<00:09:44.505>it <00:09:44.739>might <00:09:44.973>be <00:09:45.207>an <00:09:45.440>address <00:09:45.675>table.

161
00:09:47.765 --> 00:09:50.105
<00:09:47.765>Inside <00:09:48.045>that <00:09:48.324>table <00:09:48.605>we <00:09:48.885>have <00:09:49.165>rows.

162
00:09:50.205 --> 00:09:54.065
<00:09:50.205>The <00:09:50.321>rows <00:09:50.438>are <00:09:50.555>the <00:09:50.671>actual <00:09:50.788>level <00:09:50.905>of <00:09:51.021>information <00:09:51.138>and <00:09:51.255>we <00:09:51.371>have <00:09:51.488>a <00:09:51.605>schema.

163
00:09:54.165 --> 00:09:57.345
<00:09:54.165>And <00:09:54.320>the <00:09:54.476>schema <00:09:54.631>defines <00:09:54.787>what <00:09:54.942>does <00:09:55.098>that <00:09:55.253>table <00:09:55.409>look <00:09:55.564>like?

164
00:09:57.885 --> 00:10:02.825
<00:09:57.885>It <00:09:57.992>breaks <00:09:58.100>it <00:09:58.208>down <00:09:58.315>into <00:09:58.423>columns <00:09:58.531>and <00:09:58.638>columns <00:09:58.746>have <00:09:58.854>a <00:09:58.961>type <00:09:59.069>and <00:09:59.177>they <00:09:59.285>have

165
00:10:02.825 --> 00:10:05.905
<00:10:02.825>things <00:10:02.965>like, <00:10:03.105>am <00:10:03.245>I <00:10:03.385>knowable <00:10:03.525>or <00:10:03.665>not? <00:10:03.805>So <00:10:03.945>in <00:10:04.085>my <00:10:04.225>example,

166
00:10:05.925 --> 00:10:08.465
<00:10:05.925>you <00:10:06.125>can <00:10:06.324>see <00:10:06.525>Bob <00:10:06.724>hasn't <00:10:06.925>updated <00:10:07.125>that <00:10:07.324>time.

167
00:10:09.165 --> 00:10:10.945
<00:10:09.165>Joe <00:10:09.865>doesn't <00:10:10.564>Joe,

168
00:10:11.885 --> 00:10:15.705
<00:10:11.885>the <00:10:11.985>record <00:10:12.085>of <00:10:12.185>Joe <00:10:12.285>must <00:10:12.385>have <00:10:12.485>an <00:10:12.585>update <00:10:12.685>at <00:10:12.785>time, <00:10:12.885>but <00:10:12.985>it <00:10:13.085>can <00:10:13.185>be <00:10:13.285>null.

169
00:10:16.005 --> 00:10:19.265
<00:10:16.005>So <00:10:16.087>it <00:10:16.169>pr <00:10:16.252>it <00:10:16.334>looks <00:10:16.416>like <00:10:16.499>it's <00:10:16.581>not <00:10:16.663>really <00:10:16.746>there <00:10:16.828>and <00:10:16.910>I <00:10:16.993>can <00:10:17.075>find <00:10:17.157>out <00:10:17.240>if <00:10:17.322>it's <00:10:17.405>there

170
00:10:19.265 --> 00:10:23.385
<00:10:19.265>and <00:10:19.420>not <00:10:19.576>null. <00:10:19.731>When <00:10:19.887>I <00:10:20.042>talk <00:10:20.198>about <00:10:20.353>NoSQL <00:10:20.509>databases, <00:10:20.665>um,

171
00:10:23.445 --> 00:10:25.305
<00:10:23.445>in <00:10:23.600>my <00:10:23.756>case <00:10:23.911>I'm <00:10:24.067>going <00:10:24.222>to <00:10:24.378>talk <00:10:24.533>more <00:10:24.689>about <00:10:24.845>Aerospike,

172
00:10:25.305 --> 00:10:29.505
<00:10:25.305>but <00:10:25.421>some <00:10:25.538>of <00:10:25.655>these <00:10:25.771>concepts <00:10:25.888>apply <00:10:26.005>across <00:10:26.121>a <00:10:26.238>range <00:10:26.354>of <00:10:26.471>different <00:10:26.588>NoSQL <00:10:26.704>databases.

173
00:10:31.415 --> 00:10:34.065
<00:10:31.415>Typically <00:10:31.765>the <00:10:32.115>records <00:10:32.464>are <00:10:32.814>unstructured.

174
00:10:34.245 --> 00:10:38.385
<00:10:34.245>So <00:10:34.345>as <00:10:34.445>opposed <00:10:34.545>to <00:10:34.645>the <00:10:34.745>structured <00:10:34.845>data <00:10:34.945>in <00:10:35.045>a <00:10:35.145>relational <00:10:35.245>database <00:10:35.345>where <00:10:35.445>I <00:10:35.545>have <00:10:35.645>AS

175
00:10:38.385 --> 00:10:38.465
scheme,

176
00:10:38.465 --> 00:10:42.105
<00:10:38.465>which <00:10:38.572>enforces <00:10:38.680>each <00:10:38.788>record <00:10:38.895>to <00:10:39.003>have <00:10:39.111>exactly <00:10:39.218>the <00:10:39.326>same <00:10:39.434>structure <00:10:39.541>in <00:10:39.649>the <00:10:39.757>same <00:10:39.865>table.

177
00:10:43.135 --> 00:10:47.865
<00:10:43.135>Each <00:10:43.242>record <00:10:43.350>in <00:10:43.458>Aerospike <00:10:43.565>is <00:10:43.673>self <00:10:43.781>describing. <00:10:43.888>I <00:10:43.996>have <00:10:44.104>a <00:10:44.211>concept <00:10:44.319>of <00:10:44.427>a <00:10:44.535>namespace,

178
00:10:47.865 --> 00:10:52.185
<00:10:47.865>which <00:10:47.965>is <00:10:48.065>sort <00:10:48.165>of <00:10:48.265>like <00:10:48.365>a <00:10:48.465>database. <00:10:48.565>It, <00:10:48.665>it <00:10:48.765>contains <00:10:48.865>a <00:10:48.965>set <00:10:49.065>of <00:10:49.165>tables, <00:10:49.265>um,

179
00:10:52.245 --> 00:10:56.425
<00:10:52.245>but <00:10:52.345>it's <00:10:52.445>also <00:10:52.545>a <00:10:52.645>bit <00:10:52.745>like <00:10:52.845>a <00:10:52.945>table <00:10:53.045>space. <00:10:53.145>It <00:10:53.245>defines <00:10:53.345>the <00:10:53.445>actual <00:10:53.545>storage <00:10:53.645>location.

180
00:10:56.645 --> 00:10:59.025
<00:10:56.645>Are <00:10:56.738>they <00:10:56.831>going <00:10:56.925>to <00:10:57.018>be <00:10:57.111>stored <00:10:57.204>in <00:10:57.298>memory? <00:10:57.391>Are <00:10:57.485>they <00:10:57.578>going <00:10:57.671>to <00:10:57.765>be <00:10:57.858>stored <00:10:57.951>in <00:10:58.045>drive?

181
00:10:59.375 --> 00:11:03.265
<00:10:59.375>That <00:10:59.550>sort <00:10:59.725>of <00:10:59.900>thing. <00:11:00.075>Inside <00:11:00.250>that <00:11:00.425>I <00:11:00.600>have <00:11:00.775>sets,

182
00:11:03.505 --> 00:11:06.345
<00:11:03.505>a <00:11:03.680>set <00:11:03.855>is <00:11:04.030>like <00:11:04.205>a <00:11:04.380>table <00:11:04.555>and <00:11:04.730>relational <00:11:04.905>concepts.

183
00:11:06.615 --> 00:11:08.825
<00:11:06.615>It's <00:11:06.895>a <00:11:07.175>logical <00:11:07.455>grouping <00:11:07.735>of <00:11:08.015>entities.

184
00:11:09.865 --> 00:11:13.825
<00:11:09.865>I <00:11:09.981>have <00:11:10.098>rows <00:11:10.215>and <00:11:10.331>a <00:11:10.448>row <00:11:10.565>is <00:11:10.681>similar <00:11:10.798>to <00:11:10.915>a <00:11:11.031>record <00:11:11.148>in <00:11:11.265>Aerospike.

185
00:11:14.005 --> 00:11:17.345
<00:11:14.005>It <00:11:14.145>is <00:11:14.285>a <00:11:14.425>single <00:11:14.564>instance <00:11:14.705>of <00:11:14.845>the <00:11:14.985>thing <00:11:15.125>in <00:11:15.265>that <00:11:15.405>set.

186
00:11:19.155 --> 00:11:23.605
<00:11:19.155>And <00:11:19.329>like <00:11:19.505>relation <00:11:19.680>databases <00:11:19.855>have <00:11:20.030>columns, <00:11:20.204>Aerospike <00:11:20.380>has <00:11:20.555>bins.

187
00:11:23.605 --> 00:11:27.165
<00:11:23.605>So <00:11:23.838>effectively <00:11:24.071>I've <00:11:24.305>broken <00:11:24.538>down <00:11:24.771>a, <00:11:25.005>um,

188
00:11:27.805 --> 00:11:30.765
<00:11:27.805>a <00:11:27.979>single <00:11:28.155>record <00:11:28.329>can <00:11:28.505>contain <00:11:28.680>multiple <00:11:28.854>pieces <00:11:29.030>of <00:11:29.204>information.

189
00:11:31.225 --> 00:11:33.725
<00:11:31.225>So <00:11:31.365>things <00:11:31.505>like <00:11:31.645>a <00:11:31.785>name <00:11:31.925>and <00:11:32.065>email <00:11:32.205>address <00:11:32.345>and <00:11:32.485>so <00:11:32.625>on.

190
00:11:33.945 --> 00:11:37.765
<00:11:33.945>Now <00:11:34.072>they <00:11:34.199>can <00:11:34.326>be <00:11:34.454>simple <00:11:34.581>like <00:11:34.708>strings, <00:11:34.835>integers, <00:11:34.963>floats <00:11:35.090>and <00:11:35.217>so <00:11:35.345>on.

191
00:11:38.185 --> 00:11:39.125
<00:11:38.185>Or <00:11:38.396>they <00:11:38.608>can <00:11:38.819>be <00:11:39.031>complex.

192
00:11:39.125 --> 00:11:42.285
<00:11:39.125>They <00:11:39.232>can <00:11:39.340>be <00:11:39.448>things <00:11:39.555>like <00:11:39.663>list <00:11:39.771>and <00:11:39.878>maps <00:11:39.986>and <00:11:40.094>those <00:11:40.201>can <00:11:40.309>be <00:11:40.417>nested <00:11:40.525>hierarchically.

193
00:11:43.545 --> 00:11:47.905
<00:11:43.545>Now <00:11:43.745>within <00:11:43.944>Aerospike, <00:11:44.145>because <00:11:44.344>each <00:11:44.545>record <00:11:44.745>is <00:11:44.944>unstructured,

194
00:11:47.905 --> 00:11:49.505
<00:11:47.905>there's <00:11:48.185>no <00:11:48.464>schema <00:11:48.745>across <00:11:49.025>the <00:11:49.305>set.

195
00:11:49.935 --> 00:11:53.065
<00:11:49.935>Each <00:11:50.168>record <00:11:50.401>is <00:11:50.635>self-describing <00:11:50.868>the <00:11:51.101>application, <00:11:51.334>however,

196
00:11:53.195 --> 00:11:57.045
<00:11:53.195>will <00:11:53.302>normally <00:11:53.410>enforce <00:11:53.518>a <00:11:53.625>schema <00:11:53.733>on <00:11:53.841>top <00:11:53.948>of <00:11:54.056>it. <00:11:54.164>So <00:11:54.271>it <00:11:54.379>will <00:11:54.487>say, <00:11:54.595>Hey,

197
00:11:57.665 --> 00:11:59.245
<00:11:57.665>I'm <00:11:57.944>going <00:11:58.224>to <00:11:58.505>store <00:11:58.785>a <00:11:59.064>person.

198
00:11:59.425 --> 00:12:02.685
<00:11:59.425>And <00:11:59.541>the <00:11:59.658>person <00:11:59.775>might <00:11:59.891>have <00:12:00.008>the <00:12:00.125>sort <00:12:00.241>of <00:12:00.358>values <00:12:00.474>you're <00:12:00.591>seeing <00:12:00.708>there. <00:12:00.824>Um,

199
00:12:02.945 --> 00:12:06.125
<00:12:02.945>if <00:12:03.045>I'm <00:12:03.145>going <00:12:03.245>to <00:12:03.345>store <00:12:03.445>an <00:12:03.545>account, <00:12:03.645>I'd <00:12:03.745>probably <00:12:03.845>put <00:12:03.945>it <00:12:04.045>into <00:12:04.145>a <00:12:04.245>different <00:12:04.345>set.

200
00:12:09.395 --> 00:12:11.365
<00:12:09.395>When <00:12:09.595>we're <00:12:09.795>considering <00:12:09.995>a <00:12:10.194>relational <00:12:10.395>but <00:12:10.595>data <00:12:10.795>model,

201
00:12:11.625 --> 00:12:14.885
<00:12:11.625>we <00:12:11.858>typically <00:12:12.091>normalize <00:12:12.325>information. <00:12:12.558>Um, <00:12:12.791>so <00:12:13.025>inform,

202
00:12:14.885 --> 00:12:17.485
<00:12:14.885>we've <00:12:15.025>got <00:12:15.165>the <00:12:15.305>different <00:12:15.444>normal <00:12:15.585>forms, <00:12:15.725>you <00:12:15.865>know, <00:12:16.005>third <00:12:16.145>normal <00:12:16.285>form,

203
00:12:17.485 --> 00:12:20.645
<00:12:17.485>fifth <00:12:17.640>normal <00:12:17.796>form <00:12:17.951>and <00:12:18.107>so <00:12:18.262>on. <00:12:18.418>So <00:12:18.573>consider <00:12:18.729>a <00:12:18.885>customer.

204
00:12:20.845 --> 00:12:22.405
<00:12:20.845>A <00:12:21.195>customer <00:12:21.545>has <00:12:21.895>multiple <00:12:22.245>addresses.

205
00:12:23.255 --> 00:12:26.085
<00:12:23.255>Those <00:12:23.430>addresses <00:12:23.605>don't <00:12:23.780>make <00:12:23.955>sense <00:12:24.130>outside <00:12:24.305>of <00:12:24.480>the <00:12:24.655>customer.

206
00:12:26.085 --> 00:12:28.605
<00:12:26.085>If <00:12:26.212>I <00:12:26.339>delete <00:12:26.466>the <00:12:26.594>customer, <00:12:26.721>I <00:12:26.848>want <00:12:26.975>those <00:12:27.103>addresses <00:12:27.230>to <00:12:27.357>go <00:12:27.485>away.

207
00:12:29.265 --> 00:12:33.925
<00:12:29.265>So <00:12:29.365>I <00:12:29.465>would <00:12:29.564>create <00:12:29.665>my <00:12:29.765>customer <00:12:29.865>table, <00:12:29.965>I <00:12:30.064>would <00:12:30.165>give <00:12:30.265>it <00:12:30.365>a <00:12:30.465>primary <00:12:30.564>key, <00:12:30.665>um,

208
00:12:34.185 --> 00:12:36.045
<00:12:34.185>and <00:12:34.418>then <00:12:34.651>I'd <00:12:34.885>create <00:12:35.118>my <00:12:35.351>address <00:12:35.584>table.

209
00:12:36.665 --> 00:12:41.325
<00:12:36.665>The <00:12:36.772>address <00:12:36.880>table <00:12:36.988>would <00:12:37.095>have <00:12:37.203>a <00:12:37.311>foreign <00:12:37.418>key <00:12:37.526>of <00:12:37.634>the <00:12:37.741>customer <00:12:37.849>ID <00:12:37.957>and <00:12:38.064>so

210
00:12:41.395 --> 00:12:44.765
<00:12:41.395>that <00:12:41.495>if <00:12:41.595>I <00:12:41.694>go <00:12:41.795>and <00:12:41.895>delete <00:12:41.995>that <00:12:42.095>customer, <00:12:42.194>I <00:12:42.295>want <00:12:42.395>the <00:12:42.495>addresses <00:12:42.595>to <00:12:42.694>go <00:12:42.795>away.

211
00:12:45.105 --> 00:12:49.165
<00:12:45.105>So <00:12:45.198>I'll <00:12:45.291>mark <00:12:45.385>that <00:12:45.478>to <00:12:45.571>be <00:12:45.665>on <00:12:45.758>delete <00:12:45.851>cascade <00:12:45.945>and <00:12:46.038>the <00:12:46.131>removal <00:12:46.225>of <00:12:46.318>that <00:12:46.411>customer <00:12:46.505>will

212
00:12:49.165 --> 00:12:54.125
<00:12:49.165>automatically <00:12:49.292>go <00:12:49.419>and <00:12:49.546>remove <00:12:49.674>the <00:12:49.801>addresses <00:12:49.928>when <00:12:50.055>I <00:12:50.183>want <00:12:50.310>to <00:12:50.437>go <00:12:50.564>and

213
00:12:54.125 --> 00:12:58.045
<00:12:54.125>load <00:12:54.218>a <00:12:54.311>record. <00:12:54.405>And, <00:12:54.498>and <00:12:54.591>this <00:12:54.685>is <00:12:54.778>from <00:12:54.871>Postgres, <00:12:54.965>but <00:12:55.058>the <00:12:55.151>same <00:12:55.245>thing <00:12:55.338>applies <00:12:55.431>in <00:12:55.525>um,

214
00:12:58.715 --> 00:13:01.445
<00:12:58.715>most <00:12:58.855>other <00:12:58.995>relational <00:12:59.135>databases. <00:12:59.275>The <00:12:59.415>same <00:12:59.555>sort <00:12:59.695>of <00:12:59.835>concepts <00:12:59.975>are <00:13:00.115>there.

215
00:13:02.305 --> 00:13:05.925
<00:13:02.305>So <00:13:02.387>if <00:13:02.469>I <00:13:02.552>go <00:13:02.634>and <00:13:02.716>read <00:13:02.799>a <00:13:02.881>customer <00:13:02.963>and <00:13:03.046>I <00:13:03.128>want <00:13:03.210>to <00:13:03.293>get <00:13:03.375>all <00:13:03.457>the <00:13:03.540>addresses <00:13:03.622>from <00:13:03.704>that

216
00:13:06.205 --> 00:13:10.485
<00:13:06.205>customer, <00:13:06.360>I <00:13:06.516>would <00:13:06.671>define <00:13:06.827>a <00:13:06.982>index <00:13:07.138>on <00:13:07.293>the <00:13:07.449>customer, <00:13:07.605>sorry,

217
00:13:10.565 --> 00:13:13.885
<00:13:10.565>I <00:13:10.681>would <00:13:10.798>define <00:13:10.915>an <00:13:11.031>index <00:13:11.148>on <00:13:11.265>the <00:13:11.381>address <00:13:11.498>relating <00:13:11.615>to <00:13:11.731>that <00:13:11.848>customer <00:13:11.965>id.

218
00:13:14.265 --> 00:13:18.365
<00:13:14.265>And <00:13:14.372>when <00:13:14.480>I <00:13:14.588>say <00:13:14.695>select <00:13:14.803>staff <00:13:14.911>from <00:13:15.018>address <00:13:15.126>where <00:13:15.234>customer <00:13:15.341>ID <00:13:15.449>equals <00:13:15.557>my <00:13:15.665>past

219
00:13:18.645 --> 00:13:22.085
<00:13:18.645>customer <00:13:18.772>id, <00:13:18.899>it <00:13:19.026>would <00:13:19.154>go <00:13:19.281>and <00:13:19.408>read <00:13:19.535>the <00:13:19.663>index <00:13:19.790>from <00:13:19.917>the <00:13:20.045>drive

220
00:13:23.685 --> 00:13:26.895
<00:13:23.685>scan <00:13:23.801>through <00:13:23.918>that <00:13:24.035>index, <00:13:24.151>find <00:13:24.268>any <00:13:24.385>records <00:13:24.501>that <00:13:24.618>match, <00:13:24.734>go <00:13:24.851>and <00:13:24.968>read <00:13:25.084>those,

221
00:13:27.035 --> 00:13:29.575
<00:13:27.035>ind <00:13:27.190>those <00:13:27.346>records <00:13:27.501>from <00:13:27.657>the <00:13:27.812>drive <00:13:27.968>and <00:13:28.123>bring <00:13:28.279>them <00:13:28.435>back.

222
00:13:30.035 --> 00:13:31.815
<00:13:30.035>So <00:13:30.235>if <00:13:30.435>I'm <00:13:30.635>bringing <00:13:30.834>back <00:13:31.035>a <00:13:31.235>hundred <00:13:31.435>addresses,

223
00:13:32.435 --> 00:13:34.495
<00:13:32.435>I'm <00:13:32.590>doing <00:13:32.746>a <00:13:32.901>good <00:13:33.057>number <00:13:33.212>of <00:13:33.368>reads <00:13:33.523>from <00:13:33.679>the <00:13:33.834>disc,

224
00:13:34.495 --> 00:13:38.095
<00:13:34.495>there'll <00:13:34.611>be <00:13:34.728>the <00:13:34.845>index <00:13:34.961>reads <00:13:35.078>and <00:13:35.195>the <00:13:35.311>actual <00:13:35.428>device <00:13:35.545>reads <00:13:35.661>the <00:13:35.778>probability <00:13:35.895>of

225
00:13:38.095 --> 00:13:42.135
<00:13:38.095>hitting <00:13:38.295>that <00:13:38.495>99% <00:13:38.695>or <00:13:38.895>the <00:13:39.095>99.9% <00:13:39.295>is <00:13:39.495>increasing.

226
00:13:42.155 --> 00:13:44.335
<00:13:42.155>The <00:13:42.355>more <00:13:42.555>number <00:13:42.755>of <00:13:42.954>records <00:13:43.155>we <00:13:43.355>read. <00:13:43.555>If

227
00:13:46.155 --> 00:13:50.235
<00:13:46.155>I'm <00:13:46.295>doing <00:13:46.435>the <00:13:46.574>same <00:13:46.714>thing <00:13:46.855>in <00:13:46.995>Aerospike <00:13:47.135>or <00:13:47.275>another <00:13:47.415>NoSQL <00:13:47.555>database,

228
00:13:50.425 --> 00:13:51.915
<00:13:50.425>there's <00:13:50.648>different <00:13:50.872>ways <00:13:51.095>we <00:13:51.319>can <00:13:51.542>do <00:13:51.766>it,

229
00:13:51.975 --> 00:13:56.755
<00:13:51.975>but <00:13:52.102>in <00:13:52.229>this <00:13:52.356>case <00:13:52.484>I <00:13:52.611>want <00:13:52.738>my <00:13:52.865>customer <00:13:52.993>to <00:13:53.120>contain <00:13:53.247>my <00:13:53.375>addresses.

230
00:13:56.985 --> 00:14:00.155
<00:13:56.985>It's <00:13:57.140>an <00:13:57.296>aggregation, <00:13:57.451>it's <00:13:57.607>not <00:13:57.762>an <00:13:57.918>association, <00:13:58.073>it's <00:13:58.229>an <00:13:58.385>aggregation.

231
00:14:00.715 --> 00:14:04.515
<00:14:00.715>I <00:14:00.808>want <00:14:00.901>to <00:14:00.995>make <00:14:01.088>sure <00:14:01.181>that <00:14:01.275>if <00:14:01.368>my <00:14:01.461>customer <00:14:01.555>goes <00:14:01.648>away, <00:14:01.741>my <00:14:01.835>addresses <00:14:01.928>go <00:14:02.021>away. <00:14:02.115>Well,

232
00:14:05.065 --> 00:14:05.755
<00:14:05.065>what <00:14:05.272>I <00:14:05.479>can <00:14:05.686>do,

233
00:14:05.755 --> 00:14:09.515
<00:14:05.755>because <00:14:05.895>the <00:14:06.035>addresses <00:14:06.175>are <00:14:06.314>a <00:14:06.455>fairly <00:14:06.595>finite <00:14:06.735>bounded <00:14:06.875>set <00:14:07.015>of <00:14:07.155>information,

234
00:14:10.355 --> 00:14:13.915
<00:14:10.355>I <00:14:10.471>could <00:14:10.588>actually <00:14:10.705>go <00:14:10.821>and <00:14:10.938>store <00:14:11.055>those <00:14:11.171>addresses <00:14:11.288>inside <00:14:11.405>the <00:14:11.521>customer <00:14:11.638>object <00:14:11.755>itself.

235
00:14:14.615 --> 00:14:16.995
<00:14:14.615>So <00:14:14.770>you <00:14:14.926>can <00:14:15.081>see <00:14:15.237>my <00:14:15.392>structure <00:14:15.548>on <00:14:15.703>the <00:14:15.859>right <00:14:16.015>there.

236
00:14:17.465 --> 00:14:19.355
<00:14:17.465>I've <00:14:17.665>got <00:14:17.865>my <00:14:18.065>customer <00:14:18.265>and <00:14:18.465>my <00:14:18.665>customer <00:14:18.865>details,

237
00:14:19.855 --> 00:14:23.355
<00:14:19.855>but <00:14:19.971>inside <00:14:20.088>that <00:14:20.205>I've <00:14:20.321>got <00:14:20.438>my <00:14:20.555>addresses <00:14:20.671>and <00:14:20.788>the <00:14:20.905>addresses <00:14:21.021>contain <00:14:21.138>the <00:14:21.255>address

238
00:14:23.375 --> 00:14:23.825
detail.

239
00:14:23.825 --> 00:14:28.155
<00:14:23.825>They're <00:14:23.952>actually <00:14:24.079>stored <00:14:24.206>within <00:14:24.334>the <00:14:24.461>same <00:14:24.588>record <00:14:24.715>in <00:14:24.843>Aerospike <00:14:24.970>as <00:14:25.097>the <00:14:25.225>customer.

240
00:14:28.665 --> 00:14:30.355
<00:14:28.665>That <00:14:28.898>means <00:14:29.131>if <00:14:29.365>I <00:14:29.598>delete <00:14:29.831>my <00:14:30.064>customer,

241
00:14:30.355 --> 00:14:32.675
<00:14:30.355>they <00:14:30.482>automatically <00:14:30.609>go <00:14:30.736>away <00:14:30.864>'cause <00:14:30.991>they're <00:14:31.118>all <00:14:31.245>contained <00:14:31.373>in <00:14:31.500>the <00:14:31.627>same <00:14:31.755>record.

242
00:14:33.455 --> 00:14:36.515
<00:14:33.455>But <00:14:33.610>it <00:14:33.766>gives <00:14:33.921>me <00:14:34.077>some <00:14:34.232>advantages, <00:14:34.388>it <00:14:34.543>simplifies <00:14:34.699>my <00:14:34.855>addresses.

243
00:14:36.635 --> 00:14:40.275
<00:14:36.635>I <00:14:36.751>no <00:14:36.868>longer <00:14:36.985>need <00:14:37.101>an <00:14:37.218>address <00:14:37.335>ID <00:14:37.451>or <00:14:37.568>a <00:14:37.685>customer <00:14:37.801>id. <00:14:37.918>They're <00:14:38.035>also,

244
00:14:40.275 --> 00:14:41.755
<00:14:40.275>they're <00:14:40.608>inside <00:14:40.941>the <00:14:41.274>customer <00:14:41.607>id.

245
00:14:41.755 --> 00:14:44.515
<00:14:41.755>So <00:14:41.895>why <00:14:42.035>would <00:14:42.175>I <00:14:42.314>need <00:14:42.455>a <00:14:42.595>customer <00:14:42.735>ID <00:14:42.875>inside <00:14:43.015>the <00:14:43.155>address?

246
00:14:44.585 --> 00:14:48.675
<00:14:44.585>It's <00:14:44.701>already <00:14:44.818>stored <00:14:44.935>in <00:14:45.051>the <00:14:45.168>same <00:14:45.285>record <00:14:45.401>When <00:14:45.518>I <00:14:45.635>go <00:14:45.751>and <00:14:45.868>read <00:14:45.985>this,

247
00:14:48.705 --> 00:14:52.125
<00:14:48.705>it's <00:14:48.812>typically <00:14:48.920>one <00:14:49.028>read <00:14:49.135>from <00:14:49.243>the <00:14:49.351>disc <00:14:49.458>no <00:14:49.566>matter <00:14:49.674>how <00:14:49.781>many <00:14:49.889>dresses <00:14:49.997>I've <00:14:50.105>got,

248
00:14:52.475 --> 00:14:56.045
<00:14:52.475>it's <00:14:52.591>one <00:14:52.708>read. <00:14:52.825>So <00:14:52.941>it's <00:14:53.058>a <00:14:53.175>bit <00:14:53.291>more <00:14:53.408>optimized <00:14:53.525>in <00:14:53.641>that <00:14:53.758>storage <00:14:53.875>pattern.

249
00:14:56.785 --> 00:15:00.085
<00:14:56.785>Now <00:14:56.912>relational <00:14:57.039>databases <00:14:57.166>these <00:14:57.294>days <00:14:57.421>typically <00:14:57.548>have <00:14:57.675>other <00:14:57.803>ways <00:14:57.930>of <00:14:58.057>doing <00:14:58.185>this.

250
00:15:00.425 --> 00:15:03.085
<00:15:00.425>We <00:15:00.599>can <00:15:00.775>do <00:15:00.949>things, <00:15:01.125>things <00:15:01.300>through <00:15:01.474>JB <00:15:01.650>for <00:15:01.824>example,

251
00:15:03.375 --> 00:15:07.085
<00:15:03.375>which <00:15:03.515>stores <00:15:03.655>information <00:15:03.795>in <00:15:03.935>adjacent <00:15:04.075>format, <00:15:04.215>a <00:15:04.355>document <00:15:04.495>style <00:15:04.635>format. <00:15:04.775>Um,

252
00:15:07.395 --> 00:15:11.845
<00:15:07.395>they're <00:15:07.522>fairly <00:15:07.649>recent <00:15:07.776>add-ons <00:15:07.904>to <00:15:08.031>a <00:15:08.158>lot <00:15:08.285>of <00:15:08.413>relational <00:15:08.540>databases. <00:15:08.667>Whereas <00:15:08.795>um,

253
00:15:11.845 --> 00:15:16.085
<00:15:11.845>some <00:15:11.961>of <00:15:12.078>the <00:15:12.195>NoSQL <00:15:12.311>databases <00:15:12.428>like <00:15:12.545>Aerospike <00:15:12.661>have <00:15:12.778>had <00:15:12.895>this <00:15:13.011>capability <00:15:13.128>from <00:15:13.245>day

254
00:15:16.145 --> 00:15:16.825
one.

255
00:15:16.825 --> 00:15:21.485
<00:15:16.825>So <00:15:16.912>it <00:15:17.000>makes <00:15:17.087>a <00:15:17.175>lot <00:15:17.262>of <00:15:17.350>sense <00:15:17.437>to <00:15:17.525>be <00:15:17.612>able <00:15:17.700>to <00:15:17.787>nest <00:15:17.875>this <00:15:17.962>information <00:15:18.050>inside <00:15:18.137>a <00:15:18.225>current

256
00:15:21.625 --> 00:15:26.485
<00:15:21.625>object <00:15:21.800>that <00:15:21.975>works <00:15:22.150>well <00:15:22.325>if <00:15:22.500>you're <00:15:22.675>doing <00:15:22.850>an <00:15:23.025>aggregation.

257
00:15:26.865 --> 00:15:28.325
<00:15:26.865>But <00:15:27.193>what <00:15:27.522>about <00:15:27.850>an <00:15:28.179>association?

258
00:15:28.505 --> 00:15:32.165
<00:15:28.505>If <00:15:28.612>I'm <00:15:28.720>got <00:15:28.828>two <00:15:28.935>top <00:15:29.043>level <00:15:29.151>items <00:15:29.258>that <00:15:29.366>make <00:15:29.474>sense <00:15:29.581>in <00:15:29.689>their <00:15:29.797>own <00:15:29.905>right,

259
00:15:32.225 --> 00:15:33.445
<00:15:32.225>so <00:15:32.499>a <00:15:32.774>customer <00:15:33.048>and <00:15:33.323>account,

260
00:15:34.945 --> 00:15:37.385
<00:15:34.945>I <00:15:35.061>don't <00:15:35.178>want <00:15:35.295>the <00:15:35.411>accounts <00:15:35.528>to <00:15:35.645>go <00:15:35.761>away <00:15:35.878>if <00:15:35.995>I <00:15:36.111>delete <00:15:36.228>my <00:15:36.345>customer.

261
00:15:38.125 --> 00:15:41.505
<00:15:38.125>So <00:15:38.252>I <00:15:38.379>can't <00:15:38.506>go <00:15:38.634>and <00:15:38.761>nest <00:15:38.888>my <00:15:39.015>accounts <00:15:39.143>inside <00:15:39.270>my <00:15:39.397>customer <00:15:39.525>object.

262
00:15:42.255 --> 00:15:46.105
<00:15:42.255>What <00:15:42.342>I <00:15:42.430>can <00:15:42.517>do <00:15:42.605>is <00:15:42.692>I <00:15:42.780>can <00:15:42.867>go <00:15:42.955>and <00:15:43.042>store <00:15:43.130>the <00:15:43.217>IDs <00:15:43.305>of <00:15:43.392>my <00:15:43.480>customer <00:15:43.567>of <00:15:43.655>sorry,

263
00:15:46.105 --> 00:15:48.625
<00:15:46.105>of <00:15:46.338>my <00:15:46.571>accounts <00:15:46.805>inside <00:15:47.038>my <00:15:47.271>customer <00:15:47.505>object.

264
00:15:48.625 --> 00:15:51.625
<00:15:48.625>So <00:15:48.741>you <00:15:48.858>can <00:15:48.975>see <00:15:49.091>I've <00:15:49.208>now <00:15:49.325>got <00:15:49.441>a <00:15:49.558>new <00:15:49.675>field, <00:15:49.791>the <00:15:49.908>account <00:15:50.025>IDs,

265
00:15:52.735 --> 00:15:54.385
<00:15:52.735>when <00:15:53.015>I <00:15:53.295>go <00:15:53.575>and <00:15:53.855>query <00:15:54.135>it,

266
00:15:54.865 --> 00:15:57.785
<00:15:54.865>I <00:15:54.972>will <00:15:55.080>can <00:15:55.188>load <00:15:55.295>my <00:15:55.403>customer <00:15:55.511>and <00:15:55.618>that'll <00:15:55.726>give <00:15:55.834>me <00:15:55.941>a <00:15:56.049>list <00:15:56.157>of <00:15:56.265>IDs.

267
00:15:58.735 --> 00:16:02.025
<00:15:58.735>Then <00:15:58.862>I <00:15:58.989>can <00:15:59.116>go <00:15:59.244>and <00:15:59.371>load <00:15:59.498>my <00:15:59.625>accounts <00:15:59.753>and <00:15:59.880>to <00:16:00.007>do <00:16:00.135>that,

268
00:16:02.025 --> 00:16:06.905
<00:16:02.025>well <00:16:02.107>I <00:16:02.189>can <00:16:02.272>perform <00:16:02.354>what's <00:16:02.436>called <00:16:02.519>a <00:16:02.601>batch <00:16:02.683>yet <00:16:02.766>I've <00:16:02.848>got <00:16:02.930>a <00:16:03.013>set <00:16:03.095>of <00:16:03.177>keys <00:16:03.260>and <00:16:03.342>I <00:16:03.425>can

269
00:16:06.905 --> 00:16:08.745
<00:16:06.905>go <00:16:07.138>and <00:16:07.371>say <00:16:07.605>to <00:16:07.838>the <00:16:08.071>NoSQL <00:16:08.305>database,

270
00:16:09.725 --> 00:16:13.345
<00:16:09.725>go <00:16:09.852>and <00:16:09.979>get <00:16:10.106>me <00:16:10.234>the <00:16:10.361>20 <00:16:10.488>different <00:16:10.615>accounts <00:16:10.743>which <00:16:10.870>have <00:16:10.997>these <00:16:11.125>IDs.

271
00:16:14.085 --> 00:16:17.065
<00:16:14.085>And <00:16:14.260>in <00:16:14.435>something <00:16:14.610>like <00:16:14.785>Aerospike <00:16:14.960>you'll <00:16:15.135>have <00:16:15.310>multiple <00:16:15.485>nodes,

272
00:16:17.345 --> 00:16:21.025
<00:16:17.345>a <00:16:17.461>cluster <00:16:17.578>of <00:16:17.695>nodes <00:16:17.811>and <00:16:17.928>they <00:16:18.045>will <00:16:18.161>distributed <00:16:18.278>the <00:16:18.395>data <00:16:18.511>automatically <00:16:18.628>for <00:16:18.745>you

273
00:16:21.025 --> 00:16:25.225
<00:16:21.025>around <00:16:21.180>those <00:16:21.336>nodes <00:16:21.491>loading. <00:16:21.647>Those <00:16:21.802>records <00:16:21.958>are <00:16:22.113>done <00:16:22.269>in <00:16:22.425>parallel.

274
00:16:25.325 --> 00:16:29.025
<00:16:25.325>So <00:16:25.465>I <00:16:25.605>might <00:16:25.745>have <00:16:25.885>five <00:16:26.025>nodes, <00:16:26.165>there's <00:16:26.305>20 <00:16:26.445>accounts <00:16:26.585>I'm <00:16:26.725>loading.

275
00:16:29.255 --> 00:16:31.865
<00:16:29.255>Each <00:16:29.371>one <00:16:29.488>of <00:16:29.605>those <00:16:29.721>nodes <00:16:29.838>will <00:16:29.955>probably <00:16:30.071>have <00:16:30.188>about <00:16:30.305>four <00:16:30.421>of <00:16:30.538>those <00:16:30.655>accounts.

276
00:16:32.775 --> 00:16:35.785
<00:16:32.775>Aerospike <00:16:32.949>is <00:16:33.125>one <00:16:33.300>single <00:16:33.475>core <00:16:33.650>from <00:16:33.824>the <00:16:34.000>developer <00:16:34.175>side,

277
00:16:35.875 --> 00:16:37.665
<00:16:35.875>batch <00:16:36.050>read <00:16:36.225>go <00:16:36.400>and <00:16:36.575>get <00:16:36.750>me <00:16:36.925>these <00:16:37.100>20 <00:16:37.275>keys.

278
00:16:38.205 --> 00:16:41.465
<00:16:38.205>But <00:16:38.305>it's <00:16:38.405>smart <00:16:38.505>enough <00:16:38.605>that <00:16:38.705>it <00:16:38.805>will <00:16:38.905>go <00:16:39.005>to <00:16:39.105>each <00:16:39.205>one <00:16:39.305>of <00:16:39.405>those <00:16:39.505>nodes, <00:16:39.605>say,

279
00:16:41.965 --> 00:16:43.065
<00:16:41.965>go <00:16:42.163>and <00:16:42.361>load <00:16:42.559>me <00:16:42.757>these <00:16:42.955>keys,

280
00:16:43.255 --> 00:16:46.705
<00:16:43.255>load <00:16:43.348>me <00:16:43.441>these <00:16:43.535>keys <00:16:43.628>that <00:16:43.721>you <00:16:43.814>own <00:16:43.908>and <00:16:44.001>so <00:16:44.095>on <00:16:44.188>and <00:16:44.281>bring <00:16:44.375>the <00:16:44.468>information <00:16:44.561>back <00:16:44.655>in

281
00:16:46.945 --> 00:16:48.425
<00:16:46.945>parallel. <00:16:47.278>It's <00:16:47.611>very, <00:16:47.944>very <00:16:48.276>efficient.

282
00:16:51.535 --> 00:16:53.875
<00:16:51.535>So <00:16:51.709>let <00:16:51.885>me <00:16:52.060>talk <00:16:52.235>a <00:16:52.410>little <00:16:52.584>bit <00:16:52.760>about <00:16:52.935>Aerospike.

283
00:16:54.655 --> 00:16:58.915
<00:16:54.655>One <00:16:54.782>of <00:16:54.909>the <00:16:55.036>things <00:16:55.164>that <00:16:55.291>is <00:16:55.418>slightly <00:16:55.545>different <00:16:55.673>between <00:16:55.800>relational <00:16:55.927>databases <00:16:56.055>and

284
00:16:59.765 --> 00:17:01.755
<00:16:59.765>NoSQL <00:16:59.965>databases <00:17:00.165>is <00:17:00.365>this <00:17:00.564>concept <00:17:00.765>of <00:17:00.965>the <00:17:01.165>cap.

285
00:17:01.855 --> 00:17:06.115
<00:17:01.855>The <00:17:02.030>now <00:17:02.205>if <00:17:02.380>I'm <00:17:02.555>an <00:17:02.730>atomic <00:17:02.905>database <00:17:03.080>like <00:17:03.255>Postgres,

286
00:17:06.115 --> 00:17:10.155
<00:17:06.115>like <00:17:06.255>MySQL <00:17:06.395>and <00:17:06.535>so <00:17:06.675>on, <00:17:06.815>any <00:17:06.954>of <00:17:07.095>these <00:17:07.234>monolithic <00:17:07.375>atomic <00:17:07.515>RDBMSs,

287
00:17:11.265 --> 00:17:14.715
<00:17:11.265>they <00:17:11.498>typically <00:17:11.731>are <00:17:11.965>both <00:17:12.198>consistent <00:17:12.431>and <00:17:12.665>available.

288
00:17:15.385 --> 00:17:18.635
<00:17:15.385>They <00:17:15.501>run <00:17:15.618>on <00:17:15.734>a <00:17:15.851>single <00:17:15.968>node. <00:17:16.085>Now <00:17:16.201>they <00:17:16.318>might <00:17:16.435>replicate <00:17:16.551>to <00:17:16.668>another <00:17:16.785>node,

289
00:17:18.895 --> 00:17:22.155
<00:17:18.895>but <00:17:19.035>primarily <00:17:19.175>the <00:17:19.315>main <00:17:19.454>database <00:17:19.595>function <00:17:19.734>runs <00:17:19.875>on <00:17:20.014>a <00:17:20.155>single <00:17:20.295>node.

290
00:17:22.775 --> 00:17:26.915
<00:17:22.775>And <00:17:22.902>that <00:17:23.029>means <00:17:23.156>that <00:17:23.284>they <00:17:23.411>can <00:17:23.538>guarantee <00:17:23.665>both <00:17:23.793>consistency <00:17:23.920>and <00:17:24.047>availability <00:17:24.175>unless

291
00:17:26.915 --> 00:17:29.635
<00:17:26.915>that <00:17:27.055>node <00:17:27.194>goes <00:17:27.335>away, <00:17:27.474>in <00:17:27.615>which <00:17:27.754>case <00:17:27.895>they're <00:17:28.034>just <00:17:28.175>not <00:17:28.315>there,

292
00:17:29.635 --> 00:17:30.675
<00:17:29.635>they <00:17:29.869>can't <00:17:30.103>serve <00:17:30.337>the <00:17:30.571>data.

293
00:17:30.775 --> 00:17:33.835
<00:17:30.775>You <00:17:30.882>might <00:17:30.990>have <00:17:31.098>to <00:17:31.205>fall <00:17:31.313>over <00:17:31.421>to <00:17:31.528>a <00:17:31.636>backup <00:17:31.744>and <00:17:31.851>start <00:17:31.959>wondering <00:17:32.067>about <00:17:32.175>this

294
00:17:34.155 --> 00:17:38.215
<00:17:34.155>distribution <00:17:34.355>of <00:17:34.555>data <00:17:34.754>in <00:17:34.955>a <00:17:35.155>distributed <00:17:35.355>system. <00:17:35.555>Um,

295
00:17:38.315 --> 00:17:42.775
<00:17:38.315>be <00:17:38.442>it <00:17:38.569>a <00:17:38.696>NoSQL <00:17:38.824>database <00:17:38.951>like <00:17:39.078>Aerospike, <00:17:39.205>um, <00:17:39.333>or <00:17:39.460>even <00:17:39.587>a <00:17:39.715>um,

296
00:17:42.885 --> 00:17:44.775
<00:17:42.885>something <00:17:43.235>else <00:17:43.585>which <00:17:43.935>stores <00:17:44.285>state

297
00:17:46.905 --> 00:17:49.365
<00:17:46.905>you <00:17:47.060>come <00:17:47.216>into <00:17:47.371>the <00:17:47.527>concept <00:17:47.682>of <00:17:47.838>I <00:17:47.993>need <00:17:48.149>partition <00:17:48.305>tolerance,

298
00:17:49.365 --> 00:17:50.485
<00:17:49.365>I've <00:17:49.566>got <00:17:49.768>a <00:17:49.969>set <00:17:50.171>of <00:17:50.372>nodes.

299
00:17:51.115 --> 00:17:55.165
<00:17:51.115>What <00:17:51.222>happens <00:17:51.330>if <00:17:51.438>a <00:17:51.545>network <00:17:51.653>breaks <00:17:51.761>and <00:17:51.868>suddenly <00:17:51.976>my <00:17:52.084>10 <00:17:52.191>node <00:17:52.299>cluster <00:17:52.407>becomes <00:17:52.515>two

300
00:17:55.165 --> 00:17:58.645
<00:17:55.165>five <00:17:55.292>node <00:17:55.419>clusters, <00:17:55.546>there's <00:17:55.674>something <00:17:55.801>gone <00:17:55.928>on. <00:17:56.055>I <00:17:56.183>need <00:17:56.310>to <00:17:56.437>handle <00:17:56.565>that.

301
00:17:58.645 --> 00:18:03.525
<00:17:58.645>Partition <00:17:58.820>tolerance. <00:17:58.995>Inside <00:17:59.170>NoSQL <00:17:59.345>databases, <00:17:59.520>they <00:17:59.695>have <00:17:59.870>to <00:18:00.045>pick,

302
00:18:03.525 --> 00:18:05.845
<00:18:03.525>they <00:18:03.680>have <00:18:03.836>multiple <00:18:03.991>nodes <00:18:04.147>that <00:18:04.302>they <00:18:04.458>must <00:18:04.613>be <00:18:04.769>partition <00:18:04.925>tolerant.

303
00:18:07.255 --> 00:18:10.835
<00:18:07.255>The <00:18:07.395>cap <00:18:07.535>theorem <00:18:07.675>states <00:18:07.815>that <00:18:07.955>out <00:18:08.095>of <00:18:08.235>these <00:18:08.375>three <00:18:08.515>pillars, <00:18:08.655>consistency,

304
00:18:10.835 --> 00:18:14.635
<00:18:10.835>availability, <00:18:11.035>and <00:18:11.235>partition <00:18:11.435>tolerance, <00:18:11.635>you <00:18:11.835>can <00:18:12.035>guarantee <00:18:12.235>two,

305
00:18:14.695 --> 00:18:16.115
<00:18:14.695>but <00:18:14.950>you <00:18:15.206>can't <00:18:15.461>guarantee <00:18:15.717>the <00:18:15.973>third.

306
00:18:16.815 --> 00:18:20.515
<00:18:16.815>Now <00:18:16.931>we've <00:18:17.048>got <00:18:17.165>the <00:18:17.281>concept <00:18:17.398>of <00:18:17.515>partition <00:18:17.631>tolerance. <00:18:17.748>So <00:18:17.865>we've <00:18:17.981>got <00:18:18.098>that <00:18:18.215>one.

307
00:18:20.745 --> 00:18:23.955
<00:18:20.745>That <00:18:20.919>means <00:18:21.094>we <00:18:21.270>must <00:18:21.445>pick <00:18:21.620>either <00:18:21.794>consistency <00:18:21.969>or <00:18:22.145>availability.

308
00:18:24.095 --> 00:18:27.995
<00:18:24.095>We <00:18:24.222>can't <00:18:24.349>guarantee <00:18:24.476>both. <00:18:24.604>And <00:18:24.731>this <00:18:24.858>is <00:18:24.985>very <00:18:25.113>easy <00:18:25.240>to <00:18:25.367>prove. <00:18:25.495>Um,

309
00:18:28.255 --> 00:18:33.035
<00:18:28.255>if <00:18:28.362>you <00:18:28.470>look <00:18:28.578>up <00:18:28.685>Brewer <00:18:28.793>brewer's <00:18:28.901>camp <00:18:29.008>theorem, <00:18:29.116>there's <00:18:29.224>very <00:18:29.331>simple <00:18:29.439>proofs <00:18:29.547>of <00:18:29.655>this.

310
00:18:34.535 --> 00:18:37.785
<00:18:34.535>Most <00:18:34.675>no <00:18:34.815>SQL <00:18:34.955>databases <00:18:35.095>fall <00:18:35.235>into <00:18:35.375>what <00:18:35.515>we <00:18:35.655>call <00:18:35.795>an <00:18:35.935>ap.

311
00:18:37.785 --> 00:18:39.745
<00:18:37.785>They <00:18:38.135>favor <00:18:38.485>availability <00:18:38.835>of <00:18:39.185>consistency.

312
00:18:39.965 --> 00:18:44.425
<00:18:39.965>So <00:18:40.105>they <00:18:40.245>guarantee <00:18:40.385>availability <00:18:40.524>and <00:18:40.665>partition <00:18:40.804>tolerance. <00:18:40.945>It's <00:18:41.084>easy <00:18:41.225>to <00:18:41.365>do,

313
00:18:44.695 --> 00:18:48.385
<00:18:44.695>it's <00:18:44.822>quick, <00:18:44.949>but <00:18:45.076>in <00:18:45.204>financial <00:18:45.331>services <00:18:45.458>it's <00:18:45.585>really <00:18:45.713>not <00:18:45.840>what <00:18:45.967>you <00:18:46.095>want.

314
00:18:48.385 --> 00:18:50.505
<00:18:48.385>You <00:18:48.560>wanna <00:18:48.735>make <00:18:48.910>sure <00:18:49.085>your <00:18:49.260>data <00:18:49.435>is <00:18:49.610>always <00:18:49.785>consistent.

315
00:18:51.525 --> 00:18:55.345
<00:18:51.525>So <00:18:51.665>there's <00:18:51.805>some <00:18:51.945>databases <00:18:52.085>that <00:18:52.225>are <00:18:52.365>both <00:18:52.505>consistent <00:18:52.645>and <00:18:52.785>partition <00:18:52.925>tolerant.

316
00:18:55.495 --> 00:18:58.385
<00:18:55.495>Aerospike <00:18:55.650>being <00:18:55.806>one <00:18:55.961>of <00:18:56.117>them. <00:18:56.272>And <00:18:56.428>if <00:18:56.583>you <00:18:56.739>notice <00:18:56.895>carefully,

317
00:18:58.385 --> 00:18:59.745
<00:18:58.385>aerospike <00:18:58.691>actually <00:18:58.996>is <00:18:59.303>in <00:18:59.609>both.

318
00:19:00.085 --> 00:19:02.105
<00:19:00.085>You <00:19:00.285>can <00:19:00.485>actually <00:19:00.685>pick <00:19:00.885>and <00:19:01.085>choose <00:19:01.285>whether <00:19:01.485>aerospike,

319
00:19:02.765 --> 00:19:05.545
<00:19:02.765>do <00:19:02.892>I <00:19:03.019>want <00:19:03.146>it <00:19:03.274>consistent <00:19:03.401>or <00:19:03.528>do <00:19:03.655>I <00:19:03.783>want <00:19:03.910>this <00:19:04.037>data <00:19:04.165>available?

320
00:19:05.885 --> 00:19:07.585
<00:19:05.885>And <00:19:06.085>in <00:19:06.285>some <00:19:06.485>use <00:19:06.685>cases <00:19:06.885>you've <00:19:07.085>got, <00:19:07.285>um,

321
00:19:07.895 --> 00:19:12.265
<00:19:07.895>different <00:19:08.022>use <00:19:08.149>cases <00:19:08.276>in <00:19:08.404>the <00:19:08.531>same <00:19:08.658>database <00:19:08.785>might <00:19:08.913>need <00:19:09.040>different <00:19:09.167>sorts <00:19:09.295>of

322
00:19:12.265 --> 00:19:14.545
<00:19:12.265>availability. <00:19:12.420>And <00:19:12.576>with <00:19:12.731>Aerospike <00:19:12.887>you <00:19:13.042>get <00:19:13.198>to <00:19:13.353>pick <00:19:13.509>and <00:19:13.665>choose.

323
00:19:16.645 --> 00:19:18.665
<00:19:16.645>Now <00:19:16.845>Aerospike's <00:19:17.045>designed <00:19:17.245>to <00:19:17.445>be <00:19:17.645>really, <00:19:17.845>really <00:19:18.045>fast.

324
00:19:19.205 --> 00:19:24.145
<00:19:19.205>So <00:19:19.298>these <00:19:19.391>are <00:19:19.485>a <00:19:19.578>couple <00:19:19.671>of <00:19:19.764>graphs <00:19:19.858>that <00:19:19.951>came <00:19:20.044>from <00:19:20.138>our <00:19:20.231>customers <00:19:20.324>and <00:19:20.418>they're <00:19:20.511>on <00:19:20.605>big

325
00:19:24.405 --> 00:19:26.705
<00:19:24.405>use <00:19:24.580>cases. <00:19:24.754>The <00:19:24.930>first <00:19:25.105>one <00:19:25.280>is <00:19:25.455>digital <00:19:25.629>identity <00:19:25.805>management.

326
00:19:26.705 --> 00:19:28.425
<00:19:26.705>Something <00:19:26.985>that's <00:19:27.264>very <00:19:27.544>important <00:19:27.824>in <00:19:28.105>fsis,

327
00:19:28.805 --> 00:19:31.265
<00:19:28.805>if <00:19:28.945>I'm <00:19:29.085>transferring <00:19:29.225>money <00:19:29.365>from <00:19:29.505>my <00:19:29.645>bank <00:19:29.785>account <00:19:29.925>to <00:19:30.065>someone <00:19:30.205>else,

328
00:19:32.505 --> 00:19:34.745
<00:19:32.505>I <00:19:32.632>really <00:19:32.759>want <00:19:32.886>to <00:19:33.014>make <00:19:33.141>sure <00:19:33.268>that <00:19:33.395>it's <00:19:33.523>me <00:19:33.650>transferring <00:19:33.777>the <00:19:33.905>money.

329
00:19:34.865 --> 00:19:36.705
<00:19:34.865>I <00:19:35.005>don't <00:19:35.145>want <00:19:35.285>anyone <00:19:35.425>else <00:19:35.565>to <00:19:35.705>be <00:19:35.845>able <00:19:35.985>to <00:19:36.125>impersonate <00:19:36.265>me.

330
00:19:37.005 --> 00:19:40.345
<00:19:37.005>So <00:19:37.205>digital <00:19:37.405>identity <00:19:37.605>management, <00:19:37.805>um, <00:19:38.005>performs <00:19:38.205>that <00:19:38.405>check.

331
00:19:40.925 --> 00:19:44.145
<00:19:40.925>And <00:19:41.080>this <00:19:41.236>is <00:19:41.391>a <00:19:41.547>very <00:19:41.702>well-known <00:19:41.858>digital <00:19:42.013>identity <00:19:42.169>management <00:19:42.325>customer.

332
00:19:45.015 --> 00:19:47.385
<00:19:45.015>They <00:19:45.170>were <00:19:45.326>using <00:19:45.481>Cassandra <00:19:45.637>and <00:19:45.792>they <00:19:45.948>had <00:19:46.103>a <00:19:46.259>big <00:19:46.415>cluster.

333
00:19:47.745 --> 00:19:52.145
<00:19:47.745>I <00:19:47.852>mean <00:19:47.960>they're <00:19:48.068>at <00:19:48.175>four <00:19:48.283>50 <00:19:48.391>terabytes. <00:19:48.498>They <00:19:48.606>had <00:19:48.714>about <00:19:48.821>200 <00:19:48.929>nodes <00:19:49.037>of <00:19:49.145>Cassandra.

334
00:19:53.605 --> 00:19:56.615
<00:19:53.605>When <00:19:53.780>they <00:19:53.955>moved <00:19:54.130>to <00:19:54.305>Aerospike, <00:19:54.480>they <00:19:54.655>dropped <00:19:54.830>that. <00:19:55.005>Um,

335
00:19:56.615 --> 00:19:58.575
<00:19:56.615>and <00:19:56.815>you <00:19:57.015>can <00:19:57.215>see <00:19:57.415>the <00:19:57.615>latency <00:19:57.815>curves. <00:19:58.015>Um,

336
00:19:58.635 --> 00:20:01.255
<00:19:58.635>the <00:19:58.810>original <00:19:58.985>one <00:19:59.160>was <00:19:59.335>between <00:19:59.510>four <00:19:59.685>and <00:19:59.860>nine <00:20:00.035>milliseconds.

337
00:20:01.645 --> 00:20:02.815
<00:20:01.645>When <00:20:01.908>they <00:20:02.171>moved <00:20:02.434>to <00:20:02.698>Aerospike,

338
00:20:02.865 --> 00:20:07.095
<00:20:02.865>their <00:20:03.040>average <00:20:03.215>roundtrip <00:20:03.390>time <00:20:03.565>was <00:20:03.740>about <00:20:03.915>200 <00:20:04.090>microseconds. <00:20:04.265>Um,

339
00:20:07.235 --> 00:20:10.695
<00:20:07.235>and <00:20:07.375>they <00:20:07.514>increased <00:20:07.655>the <00:20:07.794>data <00:20:07.935>volume <00:20:08.074>1.3 <00:20:08.215>petabytes. <00:20:08.354>That's <00:20:08.495>in <00:20:08.635>production,

340
00:20:10.715 --> 00:20:12.135
<00:20:10.715>that's <00:20:10.970>a <00:20:11.226>large <00:20:11.481>amount <00:20:11.737>of <00:20:11.993>data.

341
00:20:13.595 --> 00:20:18.415
<00:20:13.595>The <00:20:13.722>other <00:20:13.849>one <00:20:13.976>is <00:20:14.104>a <00:20:14.231>very <00:20:14.358>well-known <00:20:14.485>online, <00:20:14.613>um, <00:20:14.740>merchant, <00:20:14.867>sorry, <00:20:14.995>online,

342
00:20:18.635 --> 00:20:22.175
<00:20:18.635>uh, <00:20:18.790>payment <00:20:18.946>provider. <00:20:19.101>And <00:20:19.257>they're <00:20:19.412>doing <00:20:19.568>financial <00:20:19.723>services <00:20:19.879>fraud <00:20:20.035>detection.

343
00:20:22.925 --> 00:20:26.375
<00:20:22.925>They <00:20:23.065>were <00:20:23.205>using <00:20:23.345>two <00:20:23.485>Oracle <00:20:23.625>rack <00:20:23.764>clusters <00:20:23.905>in <00:20:24.044>front <00:20:24.185>of <00:20:24.325>that.

344
00:20:26.375 --> 00:20:30.455
<00:20:26.375>They <00:20:26.475>had <00:20:26.575>360 <00:20:26.675>nodes <00:20:26.775>of <00:20:26.875>cash, <00:20:26.975>a <00:20:27.075>huge <00:20:27.175>cash <00:20:27.275>to <00:20:27.375>try <00:20:27.475>and <00:20:27.575>get <00:20:27.675>that <00:20:27.775>performance.

345
00:20:31.595 --> 00:20:35.895
<00:20:31.595>But <00:20:31.722>even <00:20:31.849>then, <00:20:31.976>because <00:20:32.104>of <00:20:32.231>the <00:20:32.358>probability <00:20:32.485>of <00:20:32.613>hitting <00:20:32.740>that <00:20:32.867>99th <00:20:32.995>percentile,

346
00:20:36.725 --> 00:20:38.735
<00:20:36.725>they <00:20:36.958>found <00:20:37.191>that <00:20:37.425>it <00:20:37.658>wasn't <00:20:37.891>fast <00:20:38.125>enough.

347
00:20:39.005 --> 00:20:42.975
<00:20:39.005>They <00:20:39.098>found <00:20:39.191>that <00:20:39.285>even <00:20:39.378>that <00:20:39.471>huge <00:20:39.565>cash <00:20:39.658>didn't <00:20:39.751>give <00:20:39.845>them <00:20:39.938>enough <00:20:40.031>speed <00:20:40.125>to <00:20:40.218>be <00:20:40.311>able <00:20:40.405>to

348
00:20:42.975 --> 00:20:46.415
<00:20:42.975>guarantee <00:20:43.115>the <00:20:43.254>right <00:20:43.395>sort <00:20:43.534>of <00:20:43.675>latency <00:20:43.814>for <00:20:43.955>the <00:20:44.094>end-to-end <00:20:44.235>fraud <00:20:44.375>detection.

349
00:20:47.065 --> 00:20:48.645
<00:20:47.065>And <00:20:47.298>so <00:20:47.531>they <00:20:47.765>moved <00:20:47.998>to <00:20:48.231>Aerospike. <00:20:48.465>Um,

350
00:20:48.665 --> 00:20:51.885
<00:20:48.665>and <00:20:48.781>you <00:20:48.898>can <00:20:49.014>see <00:20:49.131>again <00:20:49.248>that <00:20:49.365>latency <00:20:49.481>dropped <00:20:49.598>from <00:20:49.715>about, <00:20:49.831>in <00:20:49.948>their <00:20:50.065>case,

351
00:20:51.905 --> 00:20:55.645
<00:20:51.905>one <00:20:52.032>and <00:20:52.159>a <00:20:52.286>half <00:20:52.414>to <00:20:52.541>two <00:20:52.668>milliseconds <00:20:52.795>down <00:20:52.923>to <00:20:53.050>about <00:20:53.177>200 <00:20:53.305>microseconds.

352
00:20:56.195 --> 00:20:58.325
<00:20:56.195>It's <00:20:56.370>really <00:20:56.544>fast. <00:20:56.720>And <00:20:56.895>then <00:20:57.070>they <00:20:57.245>scaled <00:20:57.419>the <00:20:57.595>data.

353
00:20:58.325 --> 00:21:01.645
<00:20:58.325>They <00:20:58.452>went <00:20:58.579>from <00:20:58.706>10 <00:20:58.834>terabytes <00:20:58.961>to <00:20:59.088>a <00:20:59.215>hundred <00:20:59.343>terabytes <00:20:59.470>of <00:20:59.597>data. <00:20:59.725>Um,

354
00:21:01.995 --> 00:21:05.925
<00:21:01.995>both <00:21:02.122>of <00:21:02.249>these <00:21:02.376>companies <00:21:02.504>also <00:21:02.631>reduced <00:21:02.758>their <00:21:02.885>serve <00:21:03.013>count <00:21:03.140>very <00:21:03.267>dramatically <00:21:03.395>by

355
00:21:05.925 --> 00:21:08.725
<00:21:05.925>using <00:21:06.625>Aerospike. <00:21:07.325>Alright,

356
00:21:08.945 --> 00:21:11.405
<00:21:08.945>so <00:21:09.145>let's <00:21:09.345>talk <00:21:09.544>about <00:21:09.745>credit <00:21:09.945>card <00:21:10.145>fraud <00:21:10.345>detection.

357
00:21:11.825 --> 00:21:14.645
<00:21:11.825>Now <00:21:11.980>I've <00:21:12.136>done <00:21:12.291>this <00:21:12.447>with <00:21:12.602>a <00:21:12.758>good <00:21:12.913>number <00:21:13.069>of, <00:21:13.225>um,

358
00:21:15.235 --> 00:21:18.765
<00:21:15.235>financial <00:21:15.390>services <00:21:15.546>institution <00:21:15.701>between <00:21:15.857>banks <00:21:16.012>and <00:21:16.168>online <00:21:16.323>merchants <00:21:16.479>and <00:21:16.635>things

359
00:21:18.765 --> 00:21:20.765
<00:21:18.765>like <00:21:18.965>that. <00:21:19.165>And <00:21:19.365>there's <00:21:19.565>a <00:21:19.765>lot <00:21:19.965>of <00:21:20.165>commonality.

360
00:21:20.865 --> 00:21:24.365
<00:21:20.865>So <00:21:21.005>I've <00:21:21.145>tried <00:21:21.285>to <00:21:21.425>abstract <00:21:21.565>that <00:21:21.705>away <00:21:21.845>into <00:21:21.985>what <00:21:22.125>we're <00:21:22.265>seeing.

361
00:21:25.265 --> 00:21:29.915
<00:21:25.265>So <00:21:25.365>the <00:21:25.465>first <00:21:25.565>thing <00:21:25.665>we <00:21:25.765>want <00:21:25.865>to <00:21:25.965>do <00:21:26.065>is <00:21:26.165>look <00:21:26.265>at <00:21:26.365>business <00:21:26.465>requirements <00:21:26.565>because <00:21:26.665>we're

362
00:21:29.915 --> 00:21:34.395
<00:21:29.915>doing <00:21:30.070>credit <00:21:30.226>card <00:21:30.381>fraud. <00:21:30.537>Most <00:21:30.692>people <00:21:30.848>have <00:21:31.003>fraud <00:21:31.159>detection <00:21:31.315>algorithms.

363
00:21:34.725 --> 00:21:39.115
<00:21:34.725>These <00:21:34.852>are <00:21:34.979>based <00:21:35.106>on <00:21:35.234>either <00:21:35.361>rules-based <00:21:35.488>engines <00:21:35.615>or <00:21:35.743>neural <00:21:35.870>nets <00:21:35.997>or, <00:21:36.125>um,

364
00:21:39.185 --> 00:21:40.155
<00:21:39.185>deep <00:21:39.621>learning <00:21:40.058>models,

365
00:21:40.465 --> 00:21:45.235
<00:21:40.465>some <00:21:40.581>form <00:21:40.698>of <00:21:40.814>sophisticated <00:21:40.931>rules <00:21:41.048>that <00:21:41.165>you <00:21:41.281>need <00:21:41.398>to <00:21:41.514>feed <00:21:41.631>data <00:21:41.748>in <00:21:41.865>to

366
00:21:45.235 --> 00:21:45.935
<00:21:45.235>load <00:21:45.550>that, <00:21:45.865>um,

367
00:21:45.935 --> 00:21:50.875
<00:21:45.935>to <00:21:46.034>be <00:21:46.135>able <00:21:46.235>to <00:21:46.335>get <00:21:46.435>a <00:21:46.534>deterministic <00:21:46.635>view <00:21:46.735>of <00:21:46.835>is <00:21:46.935>this <00:21:47.034>fraud <00:21:47.135>or <00:21:47.235>not. <00:21:47.335>Now,

368
00:21:50.875 --> 00:21:53.795
<00:21:50.875>one <00:21:51.002>of <00:21:51.129>these <00:21:51.256>providers <00:21:51.384>I <00:21:51.511>was <00:21:51.638>working <00:21:51.765>with <00:21:51.893>had <00:21:52.020>120 <00:21:52.147>millisecond <00:21:52.275>window.

369
00:21:54.215 --> 00:21:58.545
<00:21:54.215>So <00:21:54.314>the <00:21:54.415>moment <00:21:54.514>you <00:21:54.615>swipe <00:21:54.715>their <00:21:54.814>credit <00:21:54.915>card <00:21:55.014>to <00:21:55.115>say, <00:21:55.215>yes, <00:21:55.314>it's <00:21:55.415>fraud, <00:21:55.514>or <00:21:55.615>no,

370
00:21:58.545 --> 00:22:02.785
<00:21:58.545>it's <00:21:58.661>not, <00:21:58.778>you <00:21:58.895>have <00:21:59.011>120 <00:21:59.128>milliseconds <00:21:59.245>end-to-end. <00:21:59.361>Now, <00:21:59.478>in <00:21:59.595>that <00:21:59.711>time, <00:21:59.828>you <00:21:59.945>want,

371
00:22:02.935 --> 00:22:06.105
<00:22:02.935>this <00:22:03.090>particular <00:22:03.246>customer <00:22:03.401>wanted <00:22:03.557>to <00:22:03.712>load <00:22:03.868>a <00:22:04.023>lot <00:22:04.179>of <00:22:04.335>data.

372
00:22:06.695 --> 00:22:11.305
<00:22:06.695>They <00:22:06.811>wanted <00:22:06.928>to <00:22:07.044>load <00:22:07.161>the, <00:22:07.278>your <00:22:07.395>most <00:22:07.511>recent <00:22:07.628>transaction <00:22:07.745>history <00:22:07.861>over <00:22:07.978>30 <00:22:08.095>days,

373
00:22:11.805 --> 00:22:16.705
<00:22:11.805>up <00:22:11.921>to <00:22:12.038>50,000 <00:22:12.155>records. <00:22:12.271>Um, <00:22:12.388>you <00:22:12.505>know, <00:22:12.621>for <00:22:12.738>the <00:22:12.855>average <00:22:12.971>individual <00:22:13.088>like <00:22:13.205>myself,

374
00:22:17.125 --> 00:22:20.585
<00:22:17.125>you're <00:22:17.252>not <00:22:17.379>going <00:22:17.506>to <00:22:17.634>get <00:22:17.761>anywhere <00:22:17.888>near <00:22:18.015>50,000 <00:22:18.143>records <00:22:18.270>in <00:22:18.397>30 <00:22:18.525>days.

375
00:22:20.965 --> 00:22:22.785
<00:22:20.965>But <00:22:21.120>for <00:22:21.276>some <00:22:21.431>of <00:22:21.587>the <00:22:21.742>large <00:22:21.898>customers <00:22:22.053>they're <00:22:22.209>working <00:22:22.365>with,

376
00:22:23.055 --> 00:22:24.985
<00:22:23.055>that <00:22:23.288>was <00:22:23.521>fairly <00:22:23.755>easy <00:22:23.988>to <00:22:24.221>do. <00:22:24.455>Um,

377
00:22:25.015 --> 00:22:29.185
<00:22:25.015>imagine <00:22:25.131>being <00:22:25.248>a <00:22:25.365>large <00:22:25.481>corporation <00:22:25.598>with <00:22:25.715>a <00:22:25.831>very <00:22:25.948>large <00:22:26.065>number <00:22:26.181>of <00:22:26.298>corporate <00:22:26.415>cards,

378
00:22:29.725 --> 00:22:31.625
<00:22:29.725>you <00:22:29.899>can <00:22:30.074>get <00:22:30.250>those <00:22:30.425>number <00:22:30.600>of <00:22:30.774>transactions <00:22:30.949>very <00:22:31.125>easily.

379
00:22:33.005 --> 00:22:36.585
<00:22:33.005>The <00:22:33.105>more <00:22:33.205>data <00:22:33.305>they <00:22:33.405>could <00:22:33.505>load <00:22:33.605>in <00:22:33.705>that <00:22:33.805>time, <00:22:33.905>the <00:22:34.005>better <00:22:34.105>the <00:22:34.205>result. <00:22:34.305>The <00:22:34.405>more,

380
00:22:37.315 --> 00:22:39.785
<00:22:37.315>sorry, <00:22:37.515>the <00:22:37.715>quicker <00:22:37.915>they <00:22:38.115>could <00:22:38.315>load <00:22:38.515>that <00:22:38.715>data,

381
00:22:40.205 --> 00:22:43.185
<00:22:40.205>the <00:22:40.345>more <00:22:40.485>time <00:22:40.625>they <00:22:40.764>had <00:22:40.905>for <00:22:41.044>applying <00:22:41.185>their <00:22:41.324>fraud <00:22:41.465>detection <00:22:41.605>algorithms.

382
00:22:43.645 --> 00:22:48.265
<00:22:43.645>And <00:22:43.745>so <00:22:43.845>they <00:22:43.945>wanted <00:22:44.045>to <00:22:44.145>do <00:22:44.245>it <00:22:44.345>as <00:22:44.445>quick <00:22:44.545>as <00:22:44.645>possible <00:22:44.745>In <00:22:44.845>their <00:22:44.945>case, <00:22:45.045>um,

383
00:22:48.265 --> 00:22:50.705
<00:22:48.265>they <00:22:48.465>were <00:22:48.665>processing <00:22:48.865>about <00:22:49.065>1500 <00:22:49.265>transactions <00:22:49.465>a <00:22:49.665>second,

384
00:22:50.725 --> 00:22:51.785
<00:22:50.725>but <00:22:50.915>they <00:22:51.106>needed <00:22:51.297>to <00:22:51.488>scale <00:22:51.679>up.

385
00:22:51.785 --> 00:22:53.985
<00:22:51.785>They <00:22:51.925>needed <00:22:52.065>to <00:22:52.205>scale <00:22:52.345>up <00:22:52.485>to <00:22:52.625>over <00:22:52.765>10,000 <00:22:52.905>transactions <00:22:53.045>a <00:22:53.185>second.

386
00:22:54.405 --> 00:22:58.145
<00:22:54.405>So <00:22:54.521>that's <00:22:54.638>the <00:22:54.754>problem <00:22:54.871>we're <00:22:54.988>going <00:22:55.105>to <00:22:55.221>talk <00:22:55.338>about. <00:22:55.455>Um, <00:22:55.571>in <00:22:55.688>their <00:22:55.805>case,

387
00:22:58.145 --> 00:23:02.225
<00:22:58.145>they <00:22:58.252>have <00:22:58.360>a <00:22:58.468>credit <00:22:58.575>card. <00:22:58.683>A <00:22:58.791>credit <00:22:58.898>card <00:22:59.006>has <00:22:59.114>one <00:22:59.221>or <00:22:59.329>many, <00:22:59.437>um, <00:22:59.545>transactions.

388
00:23:02.545 --> 00:23:05.065
<00:23:02.545>I <00:23:02.661>guess <00:23:02.778>it <00:23:02.895>could <00:23:03.011>have <00:23:03.128>zero, <00:23:03.245>but <00:23:03.361>obviously <00:23:03.478>fraud <00:23:03.595>detection <00:23:03.711>on <00:23:03.828>zero, <00:23:03.945>um,

389
00:23:05.065 --> 00:23:06.185
<00:23:05.065>transactions, <00:23:05.401>it's <00:23:05.737>fairly <00:23:06.072>easy.

390
00:23:08.675 --> 00:23:11.015
<00:23:08.675>So <00:23:08.830>how <00:23:08.986>will <00:23:09.141>we <00:23:09.297>model <00:23:09.452>this <00:23:09.608>in <00:23:09.763>a <00:23:09.919>relational <00:23:10.075>world?

391
00:23:12.235 --> 00:23:16.895
<00:23:12.235>We <00:23:12.362>basically <00:23:12.489>have <00:23:12.616>a <00:23:12.744>requirement <00:23:12.871>where <00:23:12.998>we <00:23:13.125>want <00:23:13.253>to <00:23:13.380>get <00:23:13.507>the <00:23:13.635>transactions

392
00:23:16.895 --> 00:23:21.135
<00:23:16.895>between <00:23:17.070>two <00:23:17.245>dates <00:23:17.420>limited <00:23:17.595>to <00:23:17.770>50,000 <00:23:17.945>ordered <00:23:18.120>by <00:23:18.295>date.

393
00:23:22.205 --> 00:23:25.105
<00:23:22.205>So <00:23:22.345>in <00:23:22.485>a <00:23:22.625>relational <00:23:22.764>world, <00:23:22.905>I <00:23:23.044>would <00:23:23.185>have <00:23:23.324>two <00:23:23.465>different <00:23:23.605>entities.

394
00:23:25.145 --> 00:23:28.825
<00:23:25.145>I <00:23:25.261>would <00:23:25.378>have <00:23:25.495>a <00:23:25.611>credit <00:23:25.728>card <00:23:25.845>entity <00:23:25.961>and <00:23:26.078>a <00:23:26.195>transaction <00:23:26.311>entity. <00:23:26.428>Um, <00:23:26.545>the,

395
00:23:29.685 --> 00:23:31.945
<00:23:29.685>the <00:23:29.840>account <00:23:29.996>number <00:23:30.151>on <00:23:30.307>the <00:23:30.462>credit <00:23:30.618>card <00:23:30.773>is <00:23:30.929>the <00:23:31.085>pan.

396
00:23:32.405 --> 00:23:34.185
<00:23:32.405>And <00:23:32.545>so <00:23:32.685>I'm <00:23:32.825>going <00:23:32.965>to <00:23:33.105>use <00:23:33.245>that <00:23:33.385>as <00:23:33.524>my <00:23:33.665>foreign <00:23:33.805>key.

397
00:23:34.185 --> 00:23:38.945
<00:23:34.185>So <00:23:34.272>I'm <00:23:34.360>going <00:23:34.447>to <00:23:34.534>have <00:23:34.622>a <00:23:34.710>pan <00:23:34.797>on <00:23:34.885>my <00:23:34.972>transaction <00:23:35.060>and <00:23:35.147>effectively <00:23:35.235>I <00:23:35.322>want <00:23:35.409>to <00:23:35.497>say <00:23:35.585>for

398
00:23:38.945 --> 00:23:43.785
<00:23:38.945>this <00:23:39.061>pan, <00:23:39.178>give <00:23:39.294>me <00:23:39.411>any <00:23:39.528>transactions <00:23:39.645>in <00:23:39.761>this <00:23:39.878>state. <00:23:39.995>Um, <00:23:40.111>the <00:23:40.228>latest <00:23:40.345>50,000,

399
00:23:43.925 --> 00:23:47.605
<00:23:43.925>the <00:23:44.080>the <00:23:44.236>most <00:23:44.391>recent <00:23:44.547>50,000 <00:23:44.702>of <00:23:44.858>those <00:23:45.013>fairly <00:23:45.169>simple. <00:23:45.325>We're,

400
00:23:47.605 --> 00:23:49.485
<00:23:47.605>we're <00:23:47.745>all <00:23:47.885>fairly <00:23:48.025>used <00:23:48.165>to <00:23:48.305>that <00:23:48.445>sort <00:23:48.585>of <00:23:48.725>modeling. <00:23:48.865>I <00:23:49.005>think

401
00:23:51.585 --> 00:23:56.325
<00:23:51.585>now <00:23:51.692>in <00:23:51.800>order <00:23:51.908>to <00:23:52.015>test <00:23:52.123>this <00:23:52.231>and <00:23:52.338>allow <00:23:52.446>people <00:23:52.554>to, <00:23:52.661>um, <00:23:52.769>play <00:23:52.877>with <00:23:52.985>it,

402
00:23:57.005 --> 00:24:01.285
<00:23:57.005>I <00:23:57.132>created <00:23:57.259>a <00:23:57.386>testing <00:23:57.514>application. <00:23:57.641>This <00:23:57.768>is <00:23:57.895>entirely <00:23:58.023>open <00:23:58.150>source. <00:23:58.277>Um, <00:23:58.405>it's,

403
00:24:01.545 --> 00:24:03.925
<00:24:01.545>you <00:24:01.778>can <00:24:02.011>see <00:24:02.245>the <00:24:02.478>link <00:24:02.711>there. <00:24:02.945>Um,

404
00:24:04.585 --> 00:24:08.565
<00:24:04.585>and <00:24:04.692>it <00:24:04.800>allows <00:24:04.908>you <00:24:05.015>to <00:24:05.123>play <00:24:05.231>with <00:24:05.338>different <00:24:05.446>databases. <00:24:05.554>It <00:24:05.661>allows <00:24:05.769>you <00:24:05.877>to <00:24:05.985>say,

405
00:24:08.685 --> 00:24:11.445
<00:24:08.685>I <00:24:08.860>want <00:24:09.034>to <00:24:09.210>play <00:24:09.385>with <00:24:09.560>this <00:24:09.735>database <00:24:09.909>or <00:24:10.085>whatever.

406
00:24:11.865 --> 00:24:16.845
<00:24:11.865>So <00:24:11.958>let <00:24:12.051>me <00:24:12.145>show <00:24:12.238>you <00:24:12.331>an <00:24:12.425>example <00:24:12.518>of <00:24:12.611>that. <00:24:12.705>So <00:24:12.798>I've <00:24:12.891>got <00:24:12.985>a <00:24:13.078>fairly <00:24:13.171>beefy <00:24:13.265>server.

407
00:24:16.995 --> 00:24:21.205
<00:24:16.995>It's <00:24:17.111>um, <00:24:17.228>not <00:24:17.344>my <00:24:17.461>laptop, <00:24:17.578>but <00:24:17.695>I'm <00:24:17.811>running <00:24:17.928>this, <00:24:18.044>um, <00:24:18.161>simulation <00:24:18.278>on <00:24:18.395>that.

408
00:24:22.025 --> 00:24:26.445
<00:24:22.025>So <00:24:22.132>I've <00:24:22.240>set <00:24:22.348>up <00:24:22.455>two <00:24:22.563>different <00:24:22.671>connections. <00:24:22.778>One <00:24:22.886>is <00:24:22.994>Aerospike <00:24:23.101>and <00:24:23.209>one <00:24:23.317>is <00:24:23.425>Postgres.

409
00:24:26.745 --> 00:24:30.725
<00:24:26.745>So <00:24:26.844>I'm <00:24:26.945>going <00:24:27.044>to <00:24:27.145>pick <00:24:27.245>my <00:24:27.344>Postgres <00:24:27.445>database <00:24:27.544>and <00:24:27.645>I've <00:24:27.745>loaded <00:24:27.844>some <00:24:27.945>data <00:24:28.044>in <00:24:28.145>there.

410
00:24:31.545 --> 00:24:32.605
<00:24:31.545>So <00:24:31.783>I'm <00:24:32.022>just <00:24:32.260>going <00:24:32.499>to,

411
00:24:32.635 --> 00:24:37.325
<00:24:32.635>I've <00:24:32.742>loaded <00:24:32.850>15,000 <00:24:32.958>records <00:24:33.065>into <00:24:33.173>my <00:24:33.281>Postgres <00:24:33.388>database <00:24:33.496>and <00:24:33.604>it's <00:24:33.711>a <00:24:33.819>16 <00:24:33.927>core <00:24:34.035>machine.

412
00:24:37.325 --> 00:24:38.525
<00:24:37.325>So <00:24:37.505>I'm <00:24:37.685>gonna <00:24:37.865>give <00:24:38.045>it <00:24:38.225>16 <00:24:38.405>threads.

413
00:24:39.465 --> 00:24:43.685
<00:24:39.465>And <00:24:39.564>what <00:24:39.665>this <00:24:39.764>is <00:24:39.865>going <00:24:39.965>to <00:24:40.064>do <00:24:40.165>is <00:24:40.264>it's <00:24:40.365>going <00:24:40.465>to <00:24:40.564>simulate <00:24:40.665>a, <00:24:40.764>um, <00:24:40.865>transaction.

414
00:24:43.705 --> 00:24:47.685
<00:24:43.705>So <00:24:43.812>credit <00:24:43.920>card <00:24:44.028>swipes <00:24:44.135>have <00:24:44.243>come <00:24:44.351>in <00:24:44.458>and <00:24:44.566>I <00:24:44.674>want <00:24:44.781>to <00:24:44.889>load <00:24:44.997>them. <00:24:45.105>Um,

415
00:24:47.805 --> 00:24:52.725
<00:24:47.805>I <00:24:47.921>want <00:24:48.038>to <00:24:48.155>load <00:24:48.271>the <00:24:48.388>customer <00:24:48.505>details <00:24:48.621>and <00:24:48.738>or <00:24:48.855>the <00:24:48.971>transactions <00:24:49.088>for <00:24:49.205>that

416
00:24:52.725 --> 00:24:55.045
<00:24:52.725>particular <00:24:52.899>card <00:24:53.074>in <00:24:53.250>as <00:24:53.425>quick <00:24:53.600>a <00:24:53.774>time <00:24:53.949>as <00:24:54.125>possible.

417
00:24:55.505 --> 00:24:59.205
<00:24:55.505>And <00:24:55.645>so <00:24:55.785>you <00:24:55.925>can <00:24:56.065>see <00:24:56.205>that <00:24:56.345>I've <00:24:56.485>got <00:24:56.625>the <00:24:56.765>average <00:24:56.905>percent,

418
00:24:59.505 --> 00:25:03.965
<00:24:59.505>or <00:24:59.612>in <00:24:59.720>this <00:24:59.828>case <00:24:59.935>couple <00:25:00.043>of <00:25:00.151>milliseconds, <00:25:00.258>the <00:25:00.366>95th <00:25:00.474>percent <00:25:00.581>and <00:25:00.689>the <00:25:00.797>99th <00:25:00.905>percent.

419
00:25:04.545 --> 00:25:07.285
<00:25:04.545>Um, <00:25:04.720>my <00:25:04.895>throughput <00:25:05.070>is <00:25:05.245>measured <00:25:05.420>on <00:25:05.595>this <00:25:05.770>bottom <00:25:05.945>graph.

420
00:25:07.985 --> 00:25:12.005
<00:25:07.985>Now <00:25:08.092>I <00:25:08.200>can <00:25:08.308>stop <00:25:08.415>that <00:25:08.523>and <00:25:08.631>start <00:25:08.738>a <00:25:08.846>different <00:25:08.954>solution <00:25:09.061>running <00:25:09.169>on <00:25:09.277>a <00:25:09.385>different

421
00:25:12.205 --> 00:25:13.485
<00:25:12.205>database <00:25:12.493>doing <00:25:12.781>the <00:25:13.069>same <00:25:13.357>thing.

422
00:25:19.055 --> 00:25:21.355
<00:25:19.055>So <00:25:19.195>that's <00:25:19.335>the <00:25:19.475>application <00:25:19.615>we're <00:25:19.755>going <00:25:19.895>to <00:25:20.035>be <00:25:20.175>using <00:25:20.315>this <00:25:20.455>testing.

423
00:25:23.875 --> 00:25:28.615
<00:25:23.875>At <00:25:24.002>the <00:25:24.129>moment, <00:25:24.256>my <00:25:24.384>application <00:25:24.511>has <00:25:24.638>only <00:25:24.765>two <00:25:24.893>databases. <00:25:25.020>It's <00:25:25.147>got <00:25:25.275>both,

424
00:25:28.835 --> 00:25:30.655
<00:25:28.835>um, <00:25:29.301>Aerospike <00:25:29.768>and <00:25:30.235>Postgres,

425
00:25:31.235 --> 00:25:34.135
<00:25:31.235>but <00:25:31.342>you <00:25:31.450>guys <00:25:31.558>probably <00:25:31.665>have <00:25:31.773>your <00:25:31.881>own <00:25:31.988>favorite <00:25:32.096>database <00:25:32.204>you <00:25:32.311>want <00:25:32.419>to <00:25:32.527>play <00:25:32.635>with.

426
00:25:34.595 --> 00:25:38.575
<00:25:34.595>If <00:25:34.695>you <00:25:34.795>want <00:25:34.895>to <00:25:34.995>run <00:25:35.095>the <00:25:35.195>same <00:25:35.295>thing, <00:25:35.395>then <00:25:35.495>it's <00:25:35.595>designed <00:25:35.695>to <00:25:35.795>be <00:25:35.895>very <00:25:35.995>extensible.

427
00:25:38.955 --> 00:25:43.935
<00:25:38.955>So <00:25:39.048>I'm <00:25:39.141>going <00:25:39.235>to <00:25:39.328>very <00:25:39.421>courageously <00:25:39.514>do <00:25:39.608>a <00:25:39.701>live <00:25:39.794>coding <00:25:39.888>demo <00:25:39.981>and <00:25:40.074>show <00:25:40.168>you <00:25:40.261>how <00:25:40.355>I'm

428
00:25:43.935 --> 00:25:48.135
<00:25:43.935>going <00:25:44.034>to <00:25:44.135>add <00:25:44.235>Redsin. <00:25:44.335>Now <00:25:44.435>reticent <00:25:44.534>is <00:25:44.635>also <00:25:44.735>in <00:25:44.835>those <00:25:44.935>SQL <00:25:45.034>database. <00:25:45.135>It's <00:25:45.235>very <00:25:45.335>fast,

429
00:25:48.165 --> 00:25:52.455
<00:25:48.165>it's <00:25:48.292>in <00:25:48.419>memory. <00:25:48.546>So <00:25:48.674>sometimes <00:25:48.801>it <00:25:48.928>has <00:25:49.055>scaling <00:25:49.183>problems <00:25:49.310>because <00:25:49.437>you <00:25:49.565>know,

430
00:25:52.475 --> 00:25:56.735
<00:25:52.475>memory <00:25:52.591>is <00:25:52.708>expensive. <00:25:52.824>Um, <00:25:52.941>but <00:25:53.058>for <00:25:53.175>small <00:25:53.291>workloads, <00:25:53.408>reds <00:25:53.524>is <00:25:53.641>a <00:25:53.758>great <00:25:53.875>database.

431
00:25:57.235 --> 00:25:59.935
<00:25:57.235>Now <00:25:57.322>I've <00:25:57.409>running <00:25:57.497>on <00:25:57.584>a <00:25:57.672>Mac, <00:25:57.760>so <00:25:57.847>I'm <00:25:57.935>going <00:25:58.022>to <00:25:58.110>give <00:25:58.197>you <00:25:58.284>a <00:25:58.372>demo <00:25:58.459>on <00:25:58.547>a <00:25:58.635>Mac.

432
00:26:00.125 --> 00:26:04.175
<00:26:00.125>I've <00:26:00.241>gone <00:26:00.358>and <00:26:00.475>installed <00:26:00.591>Reds, <00:26:00.708>so <00:26:00.825>I've <00:26:00.941>already <00:26:01.058>got <00:26:01.175>Redis <00:26:01.291>running <00:26:01.408>and <00:26:01.525>um,

433
00:26:04.235 --> 00:26:05.455
<00:26:04.235>my <00:26:04.454>server <00:26:04.674>is <00:26:04.893>up <00:26:05.113>and <00:26:05.332>running.

434
00:26:06.235 --> 00:26:09.375
<00:26:06.235>So <00:26:06.317>what <00:26:06.399>I'm <00:26:06.482>going <00:26:06.564>to <00:26:06.646>do <00:26:06.729>is <00:26:06.811>I'm <00:26:06.893>going <00:26:06.976>to <00:26:07.058>show <00:26:07.140>you <00:26:07.223>how <00:26:07.305>to <00:26:07.387>add <00:26:07.470>this <00:26:07.552>into <00:26:07.635>that

435
00:26:09.375 --> 00:26:13.975
<00:26:09.375>simulator. <00:26:09.468>It's <00:26:09.561>a <00:26:09.655>Java <00:26:09.748>based <00:26:09.841>simulator. <00:26:09.935>And <00:26:10.028>so <00:26:10.121>let's <00:26:10.215>go <00:26:10.308>and <00:26:10.401>have <00:26:10.495>a <00:26:10.588>look <00:26:10.681>at <00:26:10.775>that.

436
00:26:16.255 --> 00:26:19.515
<00:26:16.255>All <00:26:16.371>right, <00:26:16.488>so <00:26:16.605>I'm <00:26:16.721>using <00:26:16.838>my <00:26:16.955>id, <00:26:17.071>my, <00:26:17.188>in <00:26:17.305>my <00:26:17.421>case <00:26:17.538>it's <00:26:17.655>Eclipse,

437
00:26:19.515 --> 00:26:22.955
<00:26:19.515>but <00:26:19.670>it <00:26:19.826>won <00:26:19.981>won't <00:26:20.137>matter. <00:26:20.292>I've <00:26:20.448>got <00:26:20.603>my <00:26:20.759>application <00:26:20.915>downloaded.

438
00:26:23.135 --> 00:26:25.475
<00:26:23.135>I'm <00:26:23.290>going <00:26:23.446>to <00:26:23.601>add <00:26:23.757>a <00:26:23.912>new <00:26:24.068>class <00:26:24.223>into <00:26:24.379>my <00:26:24.535>databases.

439
00:26:26.055 --> 00:26:30.875
<00:26:26.055>So <00:26:26.137>I'm <00:26:26.219>going <00:26:26.302>to <00:26:26.384>add <00:26:26.466>a <00:26:26.549>new <00:26:26.631>class <00:26:26.713>in <00:26:26.796>here. <00:26:26.878>I'm <00:26:26.960>going <00:26:27.043>to <00:26:27.125>give <00:26:27.207>it <00:26:27.290>a <00:26:27.372>name <00:26:27.455>of,

440
00:26:30.925 --> 00:26:32.275
<00:26:30.925>let's <00:26:31.228>call <00:26:31.532>it <00:26:31.836>Redis <00:26:32.140>database.

441
00:26:36.815 --> 00:26:39.675
<00:26:36.815>And <00:26:36.922>then <00:26:37.030>in <00:26:37.138>here <00:26:37.245>I've <00:26:37.353>got <00:26:37.461>a <00:26:37.568>couple <00:26:37.676>of <00:26:37.784>things <00:26:37.891>I <00:26:37.999>need <00:26:38.107>to <00:26:38.215>do.

442
00:26:39.975 --> 00:26:42.155
<00:26:39.975>The <00:26:40.115>first <00:26:40.254>thing <00:26:40.395>I <00:26:40.534>need <00:26:40.675>to <00:26:40.814>do, <00:26:40.955>I'm <00:26:41.094>using <00:26:41.235>Spring. <00:26:41.375>Um,

443
00:26:42.215 --> 00:26:46.365
<00:26:42.215>so <00:26:42.314>I'm <00:26:42.415>going <00:26:42.514>to <00:26:42.615>mark <00:26:42.715>this <00:26:42.814>as <00:26:42.915>a <00:26:43.014>service <00:26:43.115>so <00:26:43.215>that <00:26:43.314>it <00:26:43.415>can <00:26:43.514>be <00:26:43.615>discovered.

444
00:26:47.145 --> 00:26:51.285
<00:26:47.145>And <00:26:47.238>the <00:26:47.331>other <00:26:47.425>thing <00:26:47.518>I'm <00:26:47.611>going <00:26:47.705>to <00:26:47.798>do <00:26:47.891>is <00:26:47.985>I'm <00:26:48.078>going <00:26:48.171>to <00:26:48.264>give <00:26:48.358>it <00:26:48.451>a <00:26:48.545>database.

445
00:26:51.385 --> 00:26:55.365
<00:26:51.385>I'm <00:26:51.462>going <00:26:51.540>to <00:26:51.618>say <00:26:51.696>I <00:26:51.773>want <00:26:51.851>to <00:26:51.929>use <00:26:52.007>this <00:26:52.085>database <00:26:52.162>and <00:26:52.240>I <00:26:52.318>need <00:26:52.396>to <00:26:52.473>tell <00:26:52.551>it <00:26:52.629>a <00:26:52.707>couple <00:26:52.785>of

446
00:26:55.365 --> 00:26:59.005
<00:26:55.365>things. <00:26:55.458>I <00:26:55.551>need <00:26:55.645>to <00:26:55.738>say <00:26:55.831>what <00:26:55.925>my <00:26:56.018>name <00:26:56.111>is. <00:26:56.205>So <00:26:56.298>we're <00:26:56.391>going <00:26:56.485>to <00:26:56.578>call <00:26:56.671>it <00:26:56.765>Redis.

447
00:26:59.665 --> 00:27:03.885
<00:26:59.665>And <00:26:59.781>then <00:26:59.898>something <00:27:00.014>which <00:27:00.131>identifies <00:27:00.248>in <00:27:00.365>case <00:27:00.481>you <00:27:00.598>want <00:27:00.715>different <00:27:00.831>sort <00:27:00.948>of <00:27:01.065>workloads

448
00:27:04.025 --> 00:27:05.445
<00:27:04.025>on, <00:27:04.451>um, <00:27:04.877>the <00:27:05.303>database.

449
00:27:05.505 --> 00:27:08.445
<00:27:05.505>I'm <00:27:05.632>gonna <00:27:05.759>keep <00:27:05.886>it <00:27:06.014>a <00:27:06.141>version <00:27:06.268>and <00:27:06.395>I'm <00:27:06.523>just <00:27:06.650>gonna <00:27:06.777>say <00:27:06.905>initial.

450
00:27:10.965 --> 00:27:11.798
<00:27:10.965>All <00:27:11.339>right? <00:27:11.714>And

451
00:27:13.515 --> 00:27:16.045
<00:27:13.515>that <00:27:13.655>will <00:27:13.795>give <00:27:13.935>it <00:27:14.075>enough <00:27:14.215>information <00:27:14.355>that <00:27:14.495>I <00:27:14.635>know <00:27:14.775>how <00:27:14.915>to,

452
00:27:16.115 --> 00:27:17.205
<00:27:16.115>that <00:27:16.278>it <00:27:16.442>knows <00:27:16.605>how <00:27:16.769>to <00:27:16.932>use <00:27:17.096>it.

453
00:27:17.385 --> 00:27:20.045
<00:27:17.385>The <00:27:17.492>other <00:27:17.600>thing <00:27:17.708>I <00:27:17.815>need <00:27:17.923>to <00:27:18.031>do <00:27:18.138>is <00:27:18.246>I <00:27:18.354>need <00:27:18.461>to <00:27:18.569>implement <00:27:18.677>an <00:27:18.785>interface.

454
00:27:20.505 --> 00:27:24.895
<00:27:20.505>So <00:27:20.738>I'm <00:27:20.971>going <00:27:21.205>to <00:27:21.438>put <00:27:21.671>implements <00:27:21.905>database

455
00:27:26.945 --> 00:27:31.635
<00:27:26.945>functions <00:27:27.085>on <00:27:27.225>a <00:27:27.365>Redis <00:27:27.504>connection. <00:27:27.645>So <00:27:27.784>if <00:27:27.925>you're <00:27:28.064>familiar <00:27:28.205>with <00:27:28.345>Reddi,

456
00:27:31.715 --> 00:27:35.475
<00:27:31.715>a <00:27:31.870>Redis <00:27:32.026>connection <00:27:32.181>is <00:27:32.337>fairly, <00:27:32.492>um, <00:27:32.648>well <00:27:32.803>known <00:27:32.959>to <00:27:33.115>you.

457
00:27:35.625 --> 00:27:38.765
<00:27:35.625>It's <00:27:35.780>the <00:27:35.936>way <00:27:36.091>you <00:27:36.247>connect <00:27:36.402>to <00:27:36.558>a <00:27:36.713>Redis <00:27:36.869>database. <00:27:37.025>Okay?

458
00:27:39.105 --> 00:27:42.365
<00:27:39.105>Now <00:27:39.212>that's <00:27:39.320>going <00:27:39.428>to <00:27:39.535>tell <00:27:39.643>me <00:27:39.751>that <00:27:39.858>I <00:27:39.966>haven't <00:27:40.074>implemented <00:27:40.181>a <00:27:40.289>bunch <00:27:40.397>of <00:27:40.505>methods.

459
00:27:42.985 --> 00:27:44.605
<00:27:42.985>So <00:27:43.218>what <00:27:43.451>I'm <00:27:43.685>going <00:27:43.918>to <00:27:44.151>do <00:27:44.385>is,

460
00:27:45.265 --> 00:27:48.765
<00:27:45.265>the <00:27:45.352>first <00:27:45.440>thing <00:27:45.527>I <00:27:45.615>need <00:27:45.702>to <00:27:45.790>do <00:27:45.877>is <00:27:45.965>tell <00:27:46.052>it <00:27:46.140>how <00:27:46.227>to <00:27:46.315>connect <00:27:46.402>to <00:27:46.490>my <00:27:46.577>database. <00:27:46.665>Um,

461
00:27:48.865 --> 00:27:50.245
<00:27:48.865>now <00:27:49.042>there's <00:27:49.219>a <00:27:49.397>number <00:27:49.574>of <00:27:49.752>steps <00:27:49.929>in <00:27:50.107>this.

462
00:27:50.385 --> 00:27:52.925
<00:27:50.385>So <00:27:50.501>I'm <00:27:50.618>actually <00:27:50.735>going <00:27:50.851>to <00:27:50.968>copy <00:27:51.085>and <00:27:51.201>paste <00:27:51.318>the <00:27:51.435>code <00:27:51.551>from <00:27:51.668>another <00:27:51.785>window,

463
00:27:54.105 --> 00:27:56.565
<00:27:54.105>but <00:27:54.198>when <00:27:54.291>I <00:27:54.385>connect <00:27:54.478>to <00:27:54.571>Reds, <00:27:54.665>I <00:27:54.758>need <00:27:54.851>a <00:27:54.945>few <00:27:55.038>things. <00:27:55.131>I <00:27:55.225>need <00:27:55.318>a <00:27:55.411>host <00:27:55.505>name,

464
00:27:56.805 --> 00:27:59.125
<00:27:56.805>I <00:27:57.038>need <00:27:57.271>a <00:27:57.505>port <00:27:57.738>and <00:27:57.971>a <00:27:58.205>password.

465
00:27:59.905 --> 00:28:04.685
<00:27:59.905>And <00:28:00.012>then <00:28:00.120>this <00:28:00.228>is <00:28:00.335>basically <00:28:00.443>saying, <00:28:00.551>um, <00:28:00.658>sorry, <00:28:00.766>I <00:28:00.874>won't <00:28:00.981>say <00:28:01.089>organize <00:28:01.197>my <00:28:01.305>imports.

466
00:28:06.245 --> 00:28:10.935
<00:28:06.245>This <00:28:06.338>is <00:28:06.431>the <00:28:06.524>information <00:28:06.618>I <00:28:06.711>need <00:28:06.804>so <00:28:06.898>that <00:28:06.991>the <00:28:07.084>application <00:28:07.178>we <00:28:07.271>have <00:28:07.364>has <00:28:07.458>a <00:28:07.551>little <00:28:07.645>UI

467
00:28:10.935 --> 00:28:14.575
<00:28:10.935>and <00:28:11.042>it <00:28:11.150>will <00:28:11.258>interpret <00:28:11.365>this <00:28:11.473>information <00:28:11.581>for <00:28:11.688>the <00:28:11.796>config <00:28:11.904>items <00:28:12.011>as <00:28:12.119>what <00:28:12.227>it's <00:28:12.335>going

468
00:28:14.575 --> 00:28:15.295
<00:28:14.575>to <00:28:14.737>ask <00:28:14.899>the <00:28:15.061>user <00:28:15.223>for.

469
00:28:15.295 --> 00:28:19.775
<00:28:15.295>And <00:28:15.382>you <00:28:15.470>can <00:28:15.557>see <00:28:15.645>it's <00:28:15.732>got <00:28:15.820>some <00:28:15.907>defaults <00:28:15.995>and <00:28:16.082>things <00:28:16.170>like <00:28:16.257>that. <00:28:16.345>Once <00:28:16.432>I <00:28:16.520>go <00:28:16.607>and <00:28:16.695>test,

470
00:28:19.805 --> 00:28:22.855
<00:28:19.805>it's <00:28:19.892>going <00:28:19.980>to <00:28:20.067>come <00:28:20.155>and <00:28:20.242>say <00:28:20.330>I'm <00:28:20.417>going <00:28:20.505>to <00:28:20.592>try <00:28:20.680>and <00:28:20.767>connect <00:28:20.855>to <00:28:20.942>the <00:28:21.030>instance <00:28:21.117>and <00:28:21.205>I'm

471
00:28:22.855 --> 00:28:25.895
<00:28:22.855>going <00:28:22.955>to <00:28:23.055>actually <00:28:23.155>try <00:28:23.255>and <00:28:23.355>connect <00:28:23.455>to <00:28:23.555>this <00:28:23.655>instance <00:28:23.755>of <00:28:23.855>the <00:28:23.955>Reta <00:28:24.055>database <00:28:24.155>that <00:28:24.255>I

472
00:28:25.895 --> 00:28:29.585
<00:28:25.895>need. <00:28:26.245>That's <00:28:26.595>all <00:28:26.945>great. <00:28:27.295>Um,

473
00:28:30.525 --> 00:28:34.145
<00:28:30.525>the <00:28:30.612>only <00:28:30.700>other <00:28:30.787>thing <00:28:30.875>that <00:28:30.962>I'm <00:28:31.050>going <00:28:31.137>to <00:28:31.225>need <00:28:31.312>to <00:28:31.400>do <00:28:31.487>is <00:28:31.575>I'm <00:28:31.662>going <00:28:31.750>to <00:28:31.837>need <00:28:31.925>to

474
00:28:34.145 --> 00:28:37.105
<00:28:34.145>implement <00:28:34.252>a <00:28:34.360>method. <00:28:34.468>So <00:28:34.575>you <00:28:34.683>can <00:28:34.791>see <00:28:34.898>that <00:28:35.006>in <00:28:35.114>this <00:28:35.221>I've <00:28:35.329>missed <00:28:35.437>some <00:28:35.545>methods.

475
00:28:37.765 --> 00:28:41.865
<00:28:37.765>So <00:28:37.858>I'm <00:28:37.951>going <00:28:38.045>to <00:28:38.138>say <00:28:38.231>go <00:28:38.325>and <00:28:38.418>give <00:28:38.511>me <00:28:38.605>all <00:28:38.698>my <00:28:38.791>unimplemented <00:28:38.885>methods. <00:28:38.978>In <00:28:39.071>my <00:28:39.165>case,

476
00:28:41.925 --> 00:28:46.825
<00:28:41.925>I'm <00:28:42.052>just <00:28:42.179>going <00:28:42.306>to, <00:28:42.434>um, <00:28:42.561>let's <00:28:42.688>do, <00:28:42.815>uh, <00:28:42.943>the <00:28:43.070>insert <00:28:43.197>credit <00:28:43.325>card,

477
00:28:46.825 --> 00:28:51.115
<00:28:46.825>this <00:28:47.291>one <00:28:47.758>here. <00:28:48.225>Alright,

478
00:28:51.335 --> 00:28:52.715
<00:28:51.335>so <00:28:51.542>I <00:28:51.749>can <00:28:51.956>go <00:28:52.163>and <00:28:52.370>save <00:28:52.577>that

479
00:28:54.255 --> 00:28:58.925
<00:28:54.255>and <00:28:54.382>just <00:28:54.509>store <00:28:54.636>my <00:28:54.764>data. <00:28:54.891>All <00:28:55.018>right? <00:28:55.145>Now <00:28:55.273>once <00:28:55.400>I <00:28:55.527>do <00:28:55.655>that,

480
00:29:01.275 --> 00:29:03.775
<00:29:01.275>I'm <00:29:01.450>still <00:29:01.625>running. <00:29:01.800>So <00:29:01.975>I <00:29:02.150>haven't <00:29:02.325>actually <00:29:02.500>updated <00:29:02.675>my,

481
00:29:03.975 --> 00:29:08.015
<00:29:03.975>I <00:29:04.074>haven't <00:29:04.175>stopped <00:29:04.274>the <00:29:04.375>application, <00:29:04.475>restarted <00:29:04.574>it. <00:29:04.675>So <00:29:04.774>if <00:29:04.875>I <00:29:04.975>go <00:29:05.074>back <00:29:05.175>to <00:29:05.274>my <00:29:05.375>browser,

482
00:29:08.355 --> 00:29:10.335
<00:29:08.355>and <00:29:08.495>this <00:29:08.635>is <00:29:08.775>just <00:29:08.915>the <00:29:09.055>one <00:29:09.195>running <00:29:09.335>on <00:29:09.475>my <00:29:09.615>local <00:29:09.755>one.

483
00:29:10.965 --> 00:29:13.455
<00:29:10.965>When <00:29:11.092>I <00:29:11.219>create <00:29:11.346>a <00:29:11.474>new <00:29:11.601>connection, <00:29:11.728>you <00:29:11.855>can <00:29:11.983>see <00:29:12.110>that <00:29:12.237>my <00:29:12.365>database,

484
00:29:13.495 --> 00:29:15.415
<00:29:13.495>I <00:29:13.695>only <00:29:13.895>have <00:29:14.094>Postgres <00:29:14.294>and <00:29:14.495>Aerospike <00:29:14.695>in <00:29:14.895>there.

485
00:29:16.075 --> 00:29:19.975
<00:29:16.075>But <00:29:16.191>now <00:29:16.308>if <00:29:16.425>I <00:29:16.541>come <00:29:16.658>back <00:29:16.775>into <00:29:16.891>my <00:29:17.008>eclipse <00:29:17.125>and <00:29:17.241>I <00:29:17.358>stop <00:29:17.475>that

486
00:29:21.165 --> 00:29:22.505
<00:29:21.165>and <00:29:21.466>then <00:29:21.768>I <00:29:22.069>restart <00:29:22.371>it,

487
00:29:25.655 --> 00:29:28.115
<00:29:25.655>if <00:29:25.795>I <00:29:25.935>then <00:29:26.075>come <00:29:26.215>back <00:29:26.355>to <00:29:26.495>my <00:29:26.635>browser <00:29:26.774>and <00:29:26.915>refresh <00:29:27.055>that

488
00:29:29.645 --> 00:29:32.495
<00:29:29.645>when <00:29:29.785>I <00:29:29.925>create <00:29:30.065>a <00:29:30.205>new <00:29:30.345>connection <00:29:30.485>and <00:29:30.625>drop <00:29:30.764>my <00:29:30.905>database <00:29:31.045>down,

489
00:29:32.715 --> 00:29:35.175
<00:29:32.715>you <00:29:32.831>can <00:29:32.948>see <00:29:33.064>I've <00:29:33.181>now <00:29:33.298>got <00:29:33.415>Redis <00:29:33.531>in <00:29:33.648>there. <00:29:33.764>If <00:29:33.881>I <00:29:33.998>select <00:29:34.115>Redis,

490
00:29:35.755 --> 00:29:39.335
<00:29:35.755>the <00:29:35.862>version <00:29:35.970>is <00:29:36.078>initial <00:29:36.185>version <00:29:36.293>we <00:29:36.401>put <00:29:36.508>in <00:29:36.616>there <00:29:36.724>and <00:29:36.831>it's <00:29:36.939>populated <00:29:37.047>some <00:29:37.155>that

491
00:29:39.335 --> 00:29:42.005
<00:29:39.335>information <00:29:39.510>that <00:29:39.685>I've <00:29:39.860>got <00:29:40.035>got. <00:29:40.210>If <00:29:40.385>I <00:29:40.560>hit <00:29:40.735>save,

492
00:29:42.645 --> 00:29:44.565
<00:29:42.645>I <00:29:42.800>need <00:29:42.956>to <00:29:43.111>tell <00:29:43.267>it <00:29:43.422>what <00:29:43.578>my <00:29:43.733>config <00:29:43.889>name <00:29:44.045>is,

493
00:29:45.435 --> 00:29:48.005
<00:29:45.435>then <00:29:45.635>it <00:29:45.835>will <00:29:46.034>go <00:29:46.235>and <00:29:46.435>create <00:29:46.635>that <00:29:46.835>connection.

494
00:29:48.035 --> 00:29:50.445
<00:29:48.035>I've <00:29:48.210>got <00:29:48.385>red <00:29:48.560>server <00:29:48.735>running <00:29:48.910>and <00:29:49.085>it <00:29:49.260>was <00:29:49.435>successful.

495
00:29:50.865 --> 00:29:52.605
<00:29:50.865>So <00:29:51.065>I <00:29:51.265>could <00:29:51.465>go <00:29:51.665>and <00:29:51.865>start <00:29:52.065>a <00:29:52.265>workload.

496
00:29:52.705 --> 00:29:56.365
<00:29:52.705>I'd <00:29:52.792>go <00:29:52.879>and <00:29:52.967>see <00:29:53.054>some <00:29:53.142>data <00:29:53.230>and <00:29:53.317>if <00:29:53.405>I <00:29:53.492>just <00:29:53.580>go <00:29:53.667>and <00:29:53.754>put <00:29:53.842>in <00:29:53.929>a <00:29:54.017>thousand <00:29:54.105>records,

497
00:29:57.195 --> 00:30:01.445
<00:29:57.195>I'll <00:29:57.294>just <00:29:57.395>give <00:29:57.495>it, <00:29:57.595>uh, <00:29:57.695>10 <00:29:57.794>threads <00:29:57.895>for <00:29:57.995>now, <00:29:58.095>it's <00:29:58.195>actually <00:29:58.294>going <00:29:58.395>to <00:29:58.495>start <00:29:58.595>working.

498
00:30:01.465 --> 00:30:04.605
<00:30:01.465>So <00:30:01.581>you <00:30:01.698>can <00:30:01.814>see <00:30:01.931>that <00:30:02.048>it's <00:30:02.165>very <00:30:02.281>efficient. <00:30:02.398>Um, <00:30:02.514>didn't <00:30:02.631>take <00:30:02.748>much <00:30:02.865>time,

499
00:30:04.985 --> 00:30:08.485
<00:30:04.985>but <00:30:05.072>it's <00:30:05.159>really <00:30:05.247>easy <00:30:05.334>to <00:30:05.422>add <00:30:05.510>your <00:30:05.597>own <00:30:05.685>database <00:30:05.772>in <00:30:05.860>here <00:30:05.947>if <00:30:06.034>you <00:30:06.122>want <00:30:06.209>to <00:30:06.297>come <00:30:06.385>play

500
00:30:08.485 --> 00:30:12.445
<00:30:08.485>with <00:30:08.592>this <00:30:08.700>and <00:30:08.808>play <00:30:08.915>with <00:30:09.023>other <00:30:09.131>databases, <00:30:09.238>um, <00:30:09.346>then <00:30:09.454>it's <00:30:09.561>really <00:30:09.669>designed <00:30:09.777>for <00:30:09.885>that.

501
00:30:15.455 --> 00:30:18.585
<00:30:15.455>Alright, <00:30:15.595>so <00:30:15.735>here's <00:30:15.875>the <00:30:16.014>code <00:30:16.155>in <00:30:16.294>case <00:30:16.435>you're <00:30:16.574>wondering <00:30:16.715>for <00:30:16.855>later.

502
00:30:20.395 --> 00:30:24.495
<00:30:20.395>So <00:30:20.550>let's <00:30:20.706>look <00:30:20.861>at <00:30:21.017>some <00:30:21.172>results. <00:30:21.328>So <00:30:21.483>that's <00:30:21.639>this <00:30:21.795>workload,

503
00:30:24.495 --> 00:30:29.135
<00:30:24.495>this <00:30:24.622>credit <00:30:24.749>card <00:30:24.876>simulation <00:30:25.004>workload. <00:30:25.131>I <00:30:25.258>ran <00:30:25.385>on <00:30:25.513>both <00:30:25.640>Postgres <00:30:25.767>and <00:30:25.895>Aerospike.

504
00:30:29.755 --> 00:30:32.575
<00:30:29.755>Now <00:30:29.895>my <00:30:30.035>aim <00:30:30.175>was <00:30:30.315>to <00:30:30.455>try <00:30:30.595>and <00:30:30.735>put <00:30:30.875>50,000 <00:30:31.015>users <00:30:31.155>in.

505
00:30:32.675 --> 00:30:36.855
<00:30:32.675>Now <00:30:32.774>each <00:30:32.875>one <00:30:32.975>of <00:30:33.075>those <00:30:33.175>users <00:30:33.274>had <00:30:33.375>up <00:30:33.475>to <00:30:33.575>a <00:30:33.675>thousand <00:30:33.774>credit <00:30:33.875>card <00:30:33.975>transactions <00:30:34.075>over

506
00:30:36.855 --> 00:30:40.175
<00:30:36.855>those <00:30:37.030>30 <00:30:37.205>days. <00:30:37.380>So <00:30:37.555>even <00:30:37.730>though <00:30:37.905>it's <00:30:38.080>50,000 <00:30:38.255>users,

507
00:30:40.635 --> 00:30:44.735
<00:30:40.635>you <00:30:40.735>multiply <00:30:40.835>that <00:30:40.935>by <00:30:41.035>the <00:30:41.135>thousand <00:30:41.235>records <00:30:41.335>or <00:30:41.435>up <00:30:41.535>to <00:30:41.635>a <00:30:41.735>thousand <00:30:41.835>records <00:30:41.935>and <00:30:42.035>we're

508
00:30:44.735 --> 00:30:48.465
<00:30:44.735>in <00:30:44.909>the <00:30:45.084>millions <00:30:45.260>of <00:30:45.435>records. <00:30:45.610>When <00:30:45.784>I <00:30:45.959>loaded <00:30:46.135>Postgres,

509
00:30:48.525 --> 00:30:52.785
<00:30:48.525>it <00:30:48.625>was <00:30:48.725>moderately <00:30:48.825>slow. <00:30:48.925>Um, <00:30:49.025>it <00:30:49.125>took <00:30:49.225>me, <00:30:49.325>took <00:30:49.425>it <00:30:49.525>over <00:30:49.625>24 <00:30:49.725>hours <00:30:49.825>to <00:30:49.925>um,

510
00:30:52.785 --> 00:30:57.305
<00:30:52.785>do <00:30:52.878>my <00:30:52.971>15,000 <00:30:53.065>users. <00:30:53.158>So <00:30:53.251>I <00:30:53.345>decided <00:30:53.438>to <00:30:53.531>stop <00:30:53.625>there. <00:30:53.718>It's <00:30:53.811>a <00:30:53.905>good <00:30:53.998>sort <00:30:54.091>of <00:30:54.185>number.

511
00:30:58.565 --> 00:31:01.825
<00:30:58.565>All <00:30:58.652>these <00:30:58.740>tests <00:30:58.827>were <00:30:58.915>run <00:30:59.002>on <00:30:59.090>the <00:30:59.177>same <00:30:59.265>machine. <00:30:59.352>Um, <00:30:59.440>so <00:30:59.527>you <00:30:59.615>can <00:30:59.702>see <00:30:59.790>the <00:30:59.877>specs <00:30:59.965>here.

512
00:31:02.405 --> 00:31:05.385
<00:31:02.405>Um, <00:31:02.498>there's <00:31:02.591>no <00:31:02.685>difference <00:31:02.778>and <00:31:02.871>I <00:31:02.965>made <00:31:03.058>sure <00:31:03.151>that <00:31:03.245>when <00:31:03.338>I <00:31:03.431>did <00:31:03.524>these <00:31:03.618>runs <00:31:03.711>for <00:31:03.805>this

513
00:31:05.385 --> 00:31:09.025
<00:31:05.385>production, <00:31:05.501>I <00:31:05.618>stopped <00:31:05.735>one <00:31:05.851>database <00:31:05.968>before <00:31:06.085>I <00:31:06.201>tested <00:31:06.318>another <00:31:06.435>one <00:31:06.551>and <00:31:06.668>so <00:31:06.785>on.

514
00:31:09.025 --> 00:31:10.385
<00:31:09.025>So <00:31:09.229>this <00:31:09.433>was <00:31:09.637>just <00:31:09.841>my <00:31:10.045>Postgres <00:31:10.249>run.

515
00:31:12.755 --> 00:31:15.815
<00:31:12.755>Here's <00:31:12.895>the <00:31:13.035>code <00:31:13.175>for <00:31:13.315>my <00:31:13.455>testing <00:31:13.595>drive. <00:31:13.735>This <00:31:13.875>is <00:31:14.015>the <00:31:14.155>inserts.

516
00:31:15.815 --> 00:31:18.175
<00:31:15.815>Didn't <00:31:15.990>worry <00:31:16.165>me <00:31:16.340>because <00:31:16.515>inserts <00:31:16.690>aren't <00:31:16.865>a <00:31:17.040>real-time <00:31:17.215>nature.

517
00:31:18.485 --> 00:31:21.775
<00:31:18.485>It's <00:31:18.592>that <00:31:18.700>credit <00:31:18.808>card <00:31:18.915>fraud <00:31:19.023>that <00:31:19.131>has <00:31:19.238>that <00:31:19.346>real-time <00:31:19.454>nature <00:31:19.561>that <00:31:19.669>we <00:31:19.777>really <00:31:19.885>want

518
00:31:21.775 --> 00:31:23.095
<00:31:21.775>to <00:31:22.072>make <00:31:22.369>fast <00:31:22.666>and <00:31:22.963>efficient.

519
00:31:24.075 --> 00:31:27.895
<00:31:24.075>So <00:31:24.215>this <00:31:24.355>is <00:31:24.495>the <00:31:24.635>code <00:31:24.775>for <00:31:24.915>reading <00:31:25.055>my <00:31:25.195>credit <00:31:25.335>card <00:31:25.475>transactions.

520
00:31:28.445 --> 00:31:33.135
<00:31:28.445>I've <00:31:28.538>got <00:31:28.631>an <00:31:28.725>index <00:31:28.818>on <00:31:28.911>my <00:31:29.004>statement <00:31:29.098>where <00:31:29.191>it's <00:31:29.284>on <00:31:29.378>the <00:31:29.471>pan <00:31:29.564>and <00:31:29.658>the <00:31:29.751>date <00:31:29.845>descending.

521
00:31:33.195 --> 00:31:36.015
<00:31:33.195>So <00:31:33.350>it's <00:31:33.506>in <00:31:33.661>the <00:31:33.817>right <00:31:33.972>order <00:31:34.128>that <00:31:34.283>we <00:31:34.439>want. <00:31:34.595>Um,

522
00:31:36.315 --> 00:31:38.215
<00:31:36.315>and <00:31:36.470>you <00:31:36.626>can <00:31:36.781>see <00:31:36.937>it's <00:31:37.092>a <00:31:37.248>very <00:31:37.403>standard <00:31:37.559>SQL <00:31:37.715>statement.

523
00:31:38.715 --> 00:31:42.895
<00:31:38.715>If <00:31:38.842>you're <00:31:38.969>used <00:31:39.096>to <00:31:39.224>Java <00:31:39.351>and <00:31:39.478>loading <00:31:39.605>data <00:31:39.733>through <00:31:39.860>a <00:31:39.987>uh, <00:31:40.115>um,

524
00:31:42.895 --> 00:31:47.055
<00:31:42.895>relational <00:31:43.011>database, <00:31:43.128>this <00:31:43.245>code <00:31:43.361>will <00:31:43.478>look <00:31:43.595>very, <00:31:43.711>uh, <00:31:43.828>familiar <00:31:43.945>with <00:31:44.061>you. <00:31:44.178>So <00:31:44.295>sorry,

525
00:31:47.255 --> 00:31:49.575
<00:31:47.255>familiar <00:31:47.371>to <00:31:47.488>you. <00:31:47.605>You <00:31:47.721>can <00:31:47.838>see <00:31:47.955>that <00:31:48.071>I'm <00:31:48.188>getting <00:31:48.305>the <00:31:48.421>data <00:31:48.538>source. <00:31:48.655>Um,

526
00:31:49.605 --> 00:31:53.335
<00:31:49.605>I've <00:31:49.721>got <00:31:49.838>Aari <00:31:49.955>connection <00:31:50.071>pool <00:31:50.188>to <00:31:50.305>make <00:31:50.421>sure <00:31:50.538>that <00:31:50.655>I'm <00:31:50.771>not <00:31:50.888>recreating <00:31:51.005>connections

527
00:31:53.675 --> 00:31:54.615
<00:31:53.675>or <00:31:53.844>that <00:31:54.013>good <00:31:54.182>sort <00:31:54.351>of <00:31:54.521>stuff.

528
00:31:54.615 --> 00:31:56.935
<00:31:54.615>It's <00:31:54.770>really <00:31:54.926>optimized <00:31:55.081>as <00:31:55.237>much <00:31:55.392>as <00:31:55.548>they <00:31:55.703>can <00:31:55.859>for <00:31:56.015>performance.

529
00:31:59.565 --> 00:32:03.145
<00:31:59.565>Now <00:31:59.681>as <00:31:59.798>I <00:31:59.915>saw, <00:32:00.031>as <00:32:00.148>you <00:32:00.265>saw <00:32:00.381>when <00:32:00.498>I <00:32:00.615>showed <00:32:00.731>you <00:32:00.848>the, <00:32:00.965>um,

530
00:32:03.145 --> 00:32:06.105
<00:32:03.145>demo <00:32:03.285>running <00:32:03.425>on <00:32:03.565>that <00:32:03.705>server <00:32:03.845>earlier, <00:32:03.985>it <00:32:04.125>got <00:32:04.264>pretty <00:32:04.405>good <00:32:04.545>results.

531
00:32:06.205 --> 00:32:08.865
<00:32:06.205>So <00:32:06.345>it's <00:32:06.485>a <00:32:06.625>couple <00:32:06.764>of <00:32:06.905>milliseconds <00:32:07.044>round <00:32:07.185>your <00:32:07.324>time <00:32:07.465>on <00:32:07.605>average.

532
00:32:10.285 --> 00:32:13.465
<00:32:10.285>The <00:32:10.565>95th <00:32:10.845>percentile <00:32:11.125>also <00:32:11.405>isn't <00:32:11.685>bad.

533
00:32:13.615 --> 00:32:17.425
<00:32:13.615>It's <00:32:13.731>about <00:32:13.848>seven <00:32:13.965>milliseconds <00:32:14.081>and <00:32:14.198>the <00:32:14.315>99th <00:32:14.431>percent <00:32:14.548>other <00:32:14.665>one <00:32:14.781>we <00:32:14.898>probably <00:32:15.015>care

534
00:32:17.425 --> 00:32:20.065
<00:32:17.425>the <00:32:17.625>most <00:32:17.825>about <00:32:18.024>is <00:32:18.225>about <00:32:18.425>14 <00:32:18.625>milliseconds. <00:32:18.825>Remember,

535
00:32:20.065 --> 00:32:24.665
<00:32:20.065>we've <00:32:20.165>got <00:32:20.265>120 <00:32:20.365>milliseconds <00:32:20.465>end <00:32:20.565>to <00:32:20.665>end <00:32:20.765>for <00:32:20.865>that <00:32:20.965>testing <00:32:21.065>for <00:32:21.165>for <00:32:21.265>to <00:32:21.365>load <00:32:21.465>that

536
00:32:24.665 --> 00:32:25.205
data.

537
00:32:25.205 --> 00:32:29.625
<00:32:25.205>So <00:32:25.287>I <00:32:25.369>need <00:32:25.452>to <00:32:25.534>make <00:32:25.616>sure <00:32:25.699>I <00:32:25.781>leave <00:32:25.863>time <00:32:25.946>in <00:32:26.028>that <00:32:26.110>window <00:32:26.193>to <00:32:26.275>make <00:32:26.357>sure <00:32:26.440>that <00:32:26.522>I <00:32:26.605>have

538
00:32:30.215 --> 00:32:33.905
<00:32:30.215>room <00:32:30.322>for <00:32:30.430>my <00:32:30.538>fraud <00:32:30.645>detection <00:32:30.753>algorithm <00:32:30.861>to <00:32:30.968>run. <00:32:31.076>It's <00:32:31.184>120 <00:32:31.291>milliseconds <00:32:31.399>end <00:32:31.507>to <00:32:31.615>end,

539
00:32:34.205 --> 00:32:38.105
<00:32:34.205>not <00:32:34.321>just <00:32:34.438>loading <00:32:34.554>the <00:32:34.671>data. <00:32:34.788>So <00:32:34.905>at <00:32:35.021>14 <00:32:35.138>milliseconds <00:32:35.254>is <00:32:35.371>my <00:32:35.488>95th <00:32:35.605>percentile.

540
00:32:38.125 --> 00:32:40.925
<00:32:38.125>That's <00:32:38.241>great. <00:32:38.358>It <00:32:38.475>gives <00:32:38.591>me <00:32:38.708>a <00:32:38.825>hundred <00:32:38.941>milliseconds <00:32:39.058>to <00:32:39.175>run <00:32:39.291>my <00:32:39.408>fraud <00:32:39.525>detection.

541
00:32:41.945 --> 00:32:45.605
<00:32:41.945>If <00:32:42.061>I <00:32:42.178>look <00:32:42.294>at <00:32:42.411>my <00:32:42.528>server, <00:32:42.645>my <00:32:42.761>CPU <00:32:42.878>seems <00:32:42.995>to <00:32:43.111>be <00:32:43.228>my <00:32:43.345>bottleneck.

542
00:32:45.755 --> 00:32:49.325
<00:32:45.755>I've <00:32:45.855>got <00:32:45.955>16 <00:32:46.055>calls <00:32:46.155>on <00:32:46.255>this <00:32:46.355>node. <00:32:46.455>That's <00:32:46.555>why <00:32:46.655>I <00:32:46.755>set <00:32:46.855>up <00:32:46.955>16 <00:32:47.055>threads. <00:32:47.155>Um,

543
00:32:49.505 --> 00:32:53.045
<00:32:49.505>if <00:32:49.605>I <00:32:49.705>actually <00:32:49.805>pushed <00:32:49.905>it <00:32:50.005>harder, <00:32:50.105>if <00:32:50.205>I <00:32:50.305>went <00:32:50.405>to <00:32:50.505>more <00:32:50.605>threads, <00:32:50.705>like <00:32:50.805>20 <00:32:50.905>threads,

544
00:32:53.365 --> 00:32:54.605
<00:32:53.365>I <00:32:53.588>didn't <00:32:53.811>get <00:32:54.034>any <00:32:54.257>more <00:32:54.481>throughput.

545
00:32:54.885 --> 00:32:58.005
<00:32:54.885>I <00:32:55.001>just <00:32:55.118>added <00:32:55.235>latency <00:32:55.351>because <00:32:55.468>I <00:32:55.585>got <00:32:55.701>thread <00:32:55.818>contention <00:32:55.935>on <00:32:56.051>the <00:32:56.168>the <00:32:56.285>database.

546
00:32:59.105 --> 00:33:03.685
<00:32:59.105>So <00:32:59.245>that's <00:32:59.385>good. <00:32:59.525>My <00:32:59.665>throughput's, <00:32:59.805>okay, <00:32:59.945>it's <00:33:00.085>at <00:33:00.225>nine <00:33:00.365>K. <00:33:00.505>Um,

547
00:33:04.085 --> 00:33:07.765
<00:33:04.085>remember <00:33:04.185>they're <00:33:04.285>doing <00:33:04.385>1500 <00:33:04.485>transactions <00:33:04.585>at <00:33:04.685>the <00:33:04.785>moment. <00:33:04.885>They <00:33:04.985>want <00:33:05.085>to <00:33:05.185>go <00:33:05.285>to <00:33:05.385>10 <00:33:05.485>K,

548
00:33:07.765 --> 00:33:12.485
<00:33:07.765>but <00:33:07.905>more <00:33:08.045>is <00:33:08.185>better. <00:33:08.325>So <00:33:08.465>that's <00:33:08.605>okay <00:33:08.745>at <00:33:08.885>the <00:33:09.025>moment. <00:33:09.165>But

549
00:33:14.055 --> 00:33:17.755
<00:33:14.055>the <00:33:14.210>problem <00:33:14.366>with <00:33:14.521>this <00:33:14.677>is <00:33:14.832>this <00:33:14.988>is <00:33:15.143>the <00:33:15.299>steady <00:33:15.455>state.

550
00:33:18.755 --> 00:33:22.115
<00:33:18.755>I <00:33:18.855>have <00:33:18.955>a <00:33:19.055>lot <00:33:19.155>of <00:33:19.255>memory <00:33:19.355>on <00:33:19.455>this <00:33:19.555>machine. <00:33:19.655>Um, <00:33:19.755>there's <00:33:19.855>128 <00:33:19.955>gigabytes <00:33:20.055>of <00:33:20.155>memory.

551
00:33:22.705 --> 00:33:26.955
<00:33:22.705>This <00:33:22.812>is <00:33:22.920>a <00:33:23.028>steady <00:33:23.135>state <00:33:23.243>when <00:33:23.351>all <00:33:23.458>these <00:33:23.566>records <00:33:23.674>were <00:33:23.781>loaded <00:33:23.889>into <00:33:23.997>the <00:33:24.105>Postgres

552
00:33:26.955 --> 00:33:30.045
<00:33:26.955>cache, <00:33:27.129>have <00:33:27.304>a <00:33:27.480>look <00:33:27.655>what <00:33:27.830>happened <00:33:28.004>when <00:33:28.179>I <00:33:28.355>started.

553
00:33:31.605 --> 00:33:33.575
<00:33:31.605>This <00:33:31.955>is <00:33:32.305>my <00:33:32.655>latency <00:33:33.005>originally,

554
00:33:34.275 --> 00:33:36.575
<00:33:34.275>and <00:33:34.402>you <00:33:34.529>can <00:33:34.656>see <00:33:34.784>the <00:33:34.911>numbers <00:33:35.038>are <00:33:35.165>a <00:33:35.293>bit <00:33:35.420>hard <00:33:35.547>to <00:33:35.675>read,

555
00:33:36.595 --> 00:33:40.935
<00:33:36.595>but <00:33:36.750>this <00:33:36.906>number <00:33:37.061>up <00:33:37.217>here <00:33:37.372>is <00:33:37.528>65,000 <00:33:37.683>milliseconds <00:33:37.839>or <00:33:37.995>65

556
00:33:41.165 --> 00:33:44.695
<00:33:41.165>seconds. <00:33:41.445>My <00:33:41.725>throughput, <00:33:42.004>it's <00:33:42.284>actually <00:33:42.565>running,

557
00:33:44.695 --> 00:33:46.295
<00:33:44.695>but <00:33:44.850>it's <00:33:45.006>so <00:33:45.161>small <00:33:45.317>that <00:33:45.472>you <00:33:45.628>can't <00:33:45.783>really <00:33:45.939>notice <00:33:46.095>it.

558
00:33:46.515 --> 00:33:48.295
<00:33:46.515>It <00:33:46.748>was <00:33:46.981>about <00:33:47.215>40 <00:33:47.448>transactions <00:33:47.681>a <00:33:47.915>second.

559
00:33:49.235 --> 00:33:54.175
<00:33:49.235>So <00:33:49.334>Postgres <00:33:49.435>would <00:33:49.534>solve <00:33:49.635>this <00:33:49.735>problem <00:33:49.834>if <00:33:49.935>I <00:33:50.034>could <00:33:50.135>fit <00:33:50.235>all <00:33:50.334>my <00:33:50.435>data <00:33:50.534>in <00:33:50.635>memory.

560
00:33:55.115 --> 00:33:59.615
<00:33:55.115>If <00:33:55.231>I <00:33:55.348>can't, <00:33:55.465>then <00:33:55.581>I'm <00:33:55.698>not <00:33:55.815>going <00:33:55.931>to <00:33:56.048>hit <00:33:56.165>my <00:33:56.281>120 <00:33:56.398>milliseconds <00:33:56.515>SLA,

561
00:33:59.955 --> 00:34:03.215
<00:33:59.955>I'm <00:34:00.071>not <00:34:00.188>going <00:34:00.304>to <00:34:00.421>go <00:34:00.538>close <00:34:00.655>to <00:34:00.771>hitting <00:34:00.888>my <00:34:01.004>1500 <00:34:01.121>transactions <00:34:01.238>a <00:34:01.355>second,

562
00:34:03.635 --> 00:34:06.975
<00:34:03.635>let <00:34:03.751>alone <00:34:03.868>where <00:34:03.985>I <00:34:04.101>want <00:34:04.218>to <00:34:04.335>get <00:34:04.451>to <00:34:04.568>at <00:34:04.685>10,000 <00:34:04.801>transactions <00:34:04.918>a <00:34:05.035>second.

563
00:34:08.075 --> 00:34:11.335
<00:34:08.074>So <00:34:08.214>Postgres <00:34:08.355>is <00:34:08.495>really, <00:34:08.634>really <00:34:08.774>good <00:34:08.915>for <00:34:09.054>a <00:34:09.194>lot <00:34:09.335>of <00:34:09.475>things.

564
00:34:11.335 --> 00:34:15.295
<00:34:11.335>But <00:34:11.534>these <00:34:11.735>really <00:34:11.935>high <00:34:12.135>speed, <00:34:12.335>low <00:34:12.534>latency <00:34:12.735>situations,

565
00:34:15.755 --> 00:34:18.415
<00:34:15.755>unless <00:34:15.871>you've <00:34:15.988>got <00:34:16.105>a <00:34:16.221>lot <00:34:16.338>of <00:34:16.455>DRAM <00:34:16.571>or <00:34:16.688>a <00:34:16.805>very <00:34:16.921>small <00:34:17.038>data <00:34:17.155>set,

566
00:34:18.445 --> 00:34:21.935
<00:34:18.445>it's <00:34:18.561>probably <00:34:18.678>something <00:34:18.795>I <00:34:18.911>would <00:34:19.028>think <00:34:19.145>twice <00:34:19.261>about <00:34:19.378>could <00:34:19.495>I <00:34:19.611>use <00:34:19.728>Postgres <00:34:19.845>or

567
00:34:21.935 --> 00:34:23.455
<00:34:21.935>relational <00:34:22.163>database <00:34:22.391>for <00:34:22.619>this <00:34:22.846>sort <00:34:23.074>of <00:34:23.303>problem?

568
00:34:23.965 --> 00:34:25.375
<00:34:23.965>It's <00:34:24.176>really <00:34:24.388>not <00:34:24.599>what <00:34:24.811>they're <00:34:25.022>designed <00:34:25.234>for.

569
00:34:25.375 --> 00:34:29.895
<00:34:25.375>They're <00:34:25.530>designed <00:34:25.686>for <00:34:25.841>those <00:34:25.997>very <00:34:26.152>strongly <00:34:26.308>consistent <00:34:26.463>multi <00:34:26.619>record <00:34:26.775>transactions

570
00:34:29.895 --> 00:34:33.015
<00:34:29.895>and <00:34:29.995>being <00:34:30.094>able <00:34:30.195>to <00:34:30.295>do <00:34:30.395>lots <00:34:30.495>of <00:34:30.594>advanced <00:34:30.695>things <00:34:30.795>like <00:34:30.895>joins <00:34:30.995>and <00:34:31.094>things <00:34:31.195>like <00:34:31.295>that

571
00:34:33.015 --> 00:34:34.815
<00:34:33.014>that <00:34:33.295>no <00:34:33.574>SQL <00:34:33.855>databases <00:34:34.134>can't <00:34:34.415>do.

572
00:34:37.945 --> 00:34:41.445
<00:34:37.945>So <00:34:38.052>I <00:34:38.160>then <00:34:38.268>want <00:34:38.375>to <00:34:38.483>try <00:34:38.591>this <00:34:38.698>on <00:34:38.806>the <00:34:38.914>exact <00:34:39.021>same <00:34:39.129>use <00:34:39.237>case, <00:34:39.345>um,

573
00:34:41.545 --> 00:34:43.685
<00:34:41.545>on <00:34:41.745>a <00:34:41.945>different <00:34:42.145>database. <00:34:42.345>In <00:34:42.545>this <00:34:42.745>case <00:34:42.945>Aerospike.

574
00:34:44.585 --> 00:34:49.325
<00:34:44.585>Now <00:34:44.725>Aerospike <00:34:44.865>also <00:34:45.005>similar <00:34:45.145>to <00:34:45.284>a <00:34:45.425>relational <00:34:45.565>database <00:34:45.705>supports <00:34:45.845>secondary <00:34:45.985>indexes.

575
00:34:49.465 --> 00:34:53.365
<00:34:49.465>So <00:34:49.581>I <00:34:49.698>could <00:34:49.815>that <00:34:49.931>sort <00:34:50.048>of <00:34:50.165>foreign <00:34:50.281>care <00:34:50.398>relationship <00:34:50.515>using <00:34:50.631>a <00:34:50.748>secondary <00:34:50.865>index

576
00:34:54.305 --> 00:34:57.365
<00:34:54.304>in <00:34:54.412>it <00:34:54.520>would <00:34:54.628>be <00:34:54.735>exactly <00:34:54.843>the <00:34:54.951>same <00:34:55.058>sort <00:34:55.166>of <00:34:55.274>model. <00:34:55.381>I <00:34:55.489>could <00:34:55.597>put <00:34:55.705>a,

577
00:34:57.475 --> 00:34:58.525
<00:34:57.475>I've <00:34:57.711>got <00:34:57.947>a <00:34:58.183>transaction <00:34:58.420>date,

578
00:34:58.605 --> 00:35:01.445
<00:34:58.605>I <00:34:58.698>could <00:34:58.791>put <00:34:58.885>a <00:34:58.978>secondary <00:34:59.071>index <00:34:59.165>on <00:34:59.258>that <00:34:59.351>and <00:34:59.445>go <00:34:59.538>and <00:34:59.631>load <00:34:59.725>the <00:34:59.818>records <00:34:59.911>from <00:35:00.005>that.

579
00:35:02.435 --> 00:35:05.405
<00:35:02.435>It's <00:35:02.575>a <00:35:02.715>really <00:35:02.855>simple <00:35:02.995>model. <00:35:03.134>If <00:35:03.275>you're <00:35:03.415>used <00:35:03.555>to <00:35:03.695>relational <00:35:03.835>databases,

580
00:35:05.475 --> 00:35:09.445
<00:35:05.475>then <00:35:05.591>it <00:35:05.708>answers <00:35:05.825>a <00:35:05.941>problem <00:35:06.058>really <00:35:06.174>well <00:35:06.291>and <00:35:06.408>it's <00:35:06.525>simple <00:35:06.641>to <00:35:06.758>do. <00:35:06.875>However,

581
00:35:10.305 --> 00:35:14.645
<00:35:10.305>the <00:35:10.421>secondary <00:35:10.538>indexes <00:35:10.654>on <00:35:10.771>a <00:35:10.888>NoSQL <00:35:11.004>databases <00:35:11.121>are <00:35:11.238>designed <00:35:11.355>for <00:35:11.471>more <00:35:11.588>scatter <00:35:11.705>gather.

582
00:35:15.275 --> 00:35:16.965
<00:35:15.275>I've <00:35:15.475>got <00:35:15.675>a <00:35:15.875>hundred <00:35:16.075>nodes <00:35:16.275>in <00:35:16.475>my <00:35:16.675>cluster,

583
00:35:17.055 --> 00:35:19.525
<00:35:17.055>let's <00:35:17.210>say <00:35:17.366>each <00:35:17.521>of <00:35:17.677>them <00:35:17.832>holds <00:35:17.988>some <00:35:18.143>of <00:35:18.299>the <00:35:18.455>records.

584
00:35:20.205 --> 00:35:23.845
<00:35:20.205>I <00:35:20.292>want <00:35:20.380>each <00:35:20.467>of <00:35:20.555>them <00:35:20.642>to <00:35:20.730>go <00:35:20.817>and <00:35:20.904>tell <00:35:20.992>me <00:35:21.080>what <00:35:21.167>re <00:35:21.255>which <00:35:21.342>records <00:35:21.430>match <00:35:21.517>my <00:35:21.605>criteria

585
00:35:24.185 --> 00:35:25.018
<00:35:24.185>and <00:35:24.434>pull <00:35:24.684>them <00:35:24.934>back.

586
00:35:25.465 --> 00:35:29.405
<00:35:25.465>So <00:35:25.547>there's <00:35:25.629>a <00:35:25.712>lot <00:35:25.794>of <00:35:25.876>work <00:35:25.959>the <00:35:26.041>client <00:35:26.123>does <00:35:26.206>when <00:35:26.288>I <00:35:26.370>say <00:35:26.453>go <00:35:26.535>and <00:35:26.617>run <00:35:26.700>this <00:35:26.782>index <00:35:26.865>that

587
00:35:29.405 --> 00:35:32.925
<00:35:29.405>is <00:35:29.505>pushed <00:35:29.605>out <00:35:29.705>to <00:35:29.805>each <00:35:29.905>of <00:35:30.005>those <00:35:30.105>nodes. <00:35:30.205>If <00:35:30.305>it's <00:35:30.405>a <00:35:30.505>small <00:35:30.605>set <00:35:30.705>of <00:35:30.805>data,

588
00:35:33.515 --> 00:35:36.845
<00:35:33.515>then <00:35:33.714>that's <00:35:33.915>probably <00:35:34.115>not <00:35:34.315>as <00:35:34.515>super <00:35:34.714>efficient. <00:35:34.915>Also,

589
00:35:37.195 --> 00:35:39.365
<00:35:37.195>each <00:35:37.335>of <00:35:37.475>those <00:35:37.615>records <00:35:37.755>is <00:35:37.895>a <00:35:38.035>separate <00:35:38.175>read <00:35:38.315>from <00:35:38.455>the <00:35:38.595>drive.

590
00:35:39.785 --> 00:35:44.125
<00:35:39.785>As <00:35:39.901>I <00:35:40.018>spoke <00:35:40.134>about <00:35:40.251>earlier, <00:35:40.368>when <00:35:40.484>you're <00:35:40.601>reading <00:35:40.718>that <00:35:40.835>99 <00:35:40.951>or <00:35:41.068>95th <00:35:41.185>percentile,

591
00:35:44.625 --> 00:35:46.285
<00:35:44.625>you <00:35:44.858>start <00:35:45.091>getting <00:35:45.325>that <00:35:45.558>hockey <00:35:45.791>stick <00:35:46.025>effect.

592
00:35:46.305 --> 00:35:48.525
<00:35:46.305>And <00:35:46.460>so <00:35:46.616>reading <00:35:46.771>a <00:35:46.927>smaller <00:35:47.082>number <00:35:47.238>of <00:35:47.393>records <00:35:47.549>is <00:35:47.705>better.

593
00:35:50.925 --> 00:35:53.625
<00:35:50.925>So <00:35:51.100>when <00:35:51.275>I <00:35:51.450>ran <00:35:51.625>it, <00:35:51.800>my <00:35:51.975>numbers <00:35:52.150>were <00:35:52.325>okay,

594
00:35:53.895 --> 00:35:58.145
<00:35:53.895>certainly <00:35:54.011>not <00:35:54.128>what <00:35:54.245>I'd <00:35:54.361>be <00:35:54.478>very <00:35:54.595>happy <00:35:54.711>with. <00:35:54.828>Um, <00:35:54.945>10 <00:35:55.061>milliseconds <00:35:55.178>on <00:35:55.295>average,

595
00:35:58.525 --> 00:36:03.065
<00:35:58.525>30 <00:35:58.652>milliseconds <00:35:58.779>on <00:35:58.906>my <00:35:59.034>95th <00:35:59.161>percentile. <00:35:59.288>Um, <00:35:59.415>and <00:35:59.543>a <00:35:59.670>bit <00:35:59.797>of <00:35:59.925>variability.

596
00:36:03.065 --> 00:36:06.545
<00:36:03.065>Somewhere <00:36:03.220>between <00:36:03.376>55 <00:36:03.531>to <00:36:03.687>60 <00:36:03.842>milliseconds <00:36:03.998>on <00:36:04.153>my <00:36:04.309>99 <00:36:04.465>percentile,

597
00:36:07.045 --> 00:36:11.065
<00:36:07.045>I'm <00:36:07.152>only <00:36:07.260>doing <00:36:07.368>600 <00:36:07.475>transactions <00:36:07.583>a <00:36:07.691>second. <00:36:07.798>So <00:36:07.906>this, <00:36:08.014>remember <00:36:08.121>on <00:36:08.229>a <00:36:08.337>single <00:36:08.445>server,

598
00:36:11.605 --> 00:36:15.585
<00:36:11.605>if <00:36:11.732>I <00:36:11.859>had <00:36:11.986>a <00:36:12.114>larger <00:36:12.241>cluster, <00:36:12.368>it <00:36:12.495>would <00:36:12.623>probably <00:36:12.750>be <00:36:12.877>better. <00:36:13.005>Um,

599
00:36:15.925 --> 00:36:18.825
<00:36:15.925>but <00:36:16.041>you <00:36:16.158>know, <00:36:16.275>it's <00:36:16.391>probably <00:36:16.508>still <00:36:16.625>not <00:36:16.741>the <00:36:16.858>way <00:36:16.975>I'd <00:36:17.091>solve <00:36:17.208>the <00:36:17.325>problem.

600
00:36:21.785 --> 00:36:25.605
<00:36:21.785>One <00:36:21.878>of <00:36:21.971>the <00:36:22.065>problems <00:36:22.158>we <00:36:22.251>face <00:36:22.345>in <00:36:22.438>both <00:36:22.531>the <00:36:22.625>relational <00:36:22.718>and <00:36:22.811>the <00:36:22.904>NoSQL <00:36:22.998>data <00:36:23.091>model <00:36:23.185>is

601
00:36:25.605 --> 00:36:28.165
<00:36:25.605>that <00:36:25.732>we <00:36:25.859>are <00:36:25.986>loading <00:36:26.114>a <00:36:26.241>lot <00:36:26.368>of <00:36:26.495>individual <00:36:26.623>reads <00:36:26.750>from <00:36:26.877>the <00:36:27.005>drive.

602
00:36:28.425 --> 00:36:29.805
<00:36:28.425>Now <00:36:28.673>these <00:36:28.921>are <00:36:29.170>SSDs, <00:36:29.418>they're <00:36:29.667>fast,

603
00:36:29.805 --> 00:36:31.445
<00:36:29.805>they're <00:36:29.944>designed <00:36:30.085>to <00:36:30.225>be <00:36:30.365>read <00:36:30.504>in <00:36:30.645>parallel <00:36:30.785>and <00:36:30.924>things <00:36:31.065>like <00:36:31.205>that,

604
00:36:31.985 --> 00:36:36.645
<00:36:31.985>but <00:36:32.125>sometimes <00:36:32.265>it's <00:36:32.405>better <00:36:32.545>to <00:36:32.685>put <00:36:32.825>multiple <00:36:32.965>records <00:36:33.105>into <00:36:33.245>one <00:36:33.385>structure.

605
00:36:36.945 --> 00:36:40.405
<00:36:36.945>So <00:36:37.120>credit <00:36:37.295>cards, <00:36:37.470>for <00:36:37.645>instance, <00:36:37.820>sorry, <00:36:37.995>credit <00:36:38.170>card <00:36:38.345>transactions.

606
00:36:41.245 --> 00:36:44.965
<00:36:41.245>I <00:36:41.361>want <00:36:41.478>to <00:36:41.595>store <00:36:41.711>a <00:36:41.828>lot <00:36:41.944>of <00:36:42.061>transactions <00:36:42.178>in, <00:36:42.295>um, <00:36:42.411>a <00:36:42.528>day <00:36:42.645>range.

607
00:36:45.385 --> 00:36:49.405
<00:36:45.385>So <00:36:45.618>instead <00:36:45.851>of <00:36:46.085>storing <00:36:46.318>each <00:36:46.551>transaction <00:36:46.785>individually,

608
00:36:49.515 --> 00:36:52.005
<00:36:49.515>what <00:36:49.608>I'm <00:36:49.701>gonna <00:36:49.795>do <00:36:49.888>is <00:36:49.981>I'm <00:36:50.075>going <00:36:50.168>to <00:36:50.261>bucket <00:36:50.355>them <00:36:50.448>like <00:36:50.541>we <00:36:50.634>saw <00:36:50.728>with <00:36:50.821>the <00:36:50.915>addresses

609
00:36:52.005 --> 00:36:52.838
earlier.

610
00:36:52.945 --> 00:36:57.485
<00:36:52.945>I'm <00:36:53.045>going <00:36:53.145>to <00:36:53.245>store <00:36:53.345>all <00:36:53.445>the <00:36:53.545>transactions <00:36:53.645>for <00:36:53.745>a <00:36:53.845>single <00:36:53.945>credit <00:36:54.045>card <00:36:54.145>for <00:36:54.245>a <00:36:54.345>single

611
00:36:57.625 --> 00:36:59.125
<00:36:57.625>day <00:36:57.962>in <00:36:58.300>a <00:36:58.637>single <00:36:58.975>record.

612
00:37:00.105 --> 00:37:04.045
<00:37:00.105>Now <00:37:00.205>that <00:37:00.305>means <00:37:00.405>that <00:37:00.505>if <00:37:00.605>I <00:37:00.705>want <00:37:00.805>to <00:37:00.905>load <00:37:01.005>all <00:37:01.105>the <00:37:01.205>transactions <00:37:01.305>for <00:37:01.405>30 <00:37:01.505>days,

613
00:37:04.685 --> 00:37:08.125
<00:37:04.685>I <00:37:04.767>can <00:37:04.849>just <00:37:04.932>load <00:37:05.014>30 <00:37:05.096>records. <00:37:05.179>I <00:37:05.261>know <00:37:05.343>what <00:37:05.426>day <00:37:05.508>is. <00:37:05.590>If <00:37:05.673>I <00:37:05.755>want <00:37:05.837>the <00:37:05.920>last <00:37:06.002>30 <00:37:06.085>days,

614
00:37:08.485 --> 00:37:13.325
<00:37:08.485>I <00:37:08.585>can <00:37:08.685>work <00:37:08.785>out <00:37:08.885>those <00:37:08.985>keys <00:37:09.085>very <00:37:09.185>easily <00:37:09.285>and <00:37:09.385>therefore <00:37:09.485>I <00:37:09.585>can <00:37:09.685>go <00:37:09.785>and <00:37:09.885>perform

615
00:37:13.325 --> 00:37:17.245
<00:37:13.325>that <00:37:13.424>batch <00:37:13.524>get <00:37:13.625>and <00:37:13.725>do <00:37:13.825>that <00:37:13.924>in <00:37:14.024>parallel <00:37:14.125>while <00:37:14.225>I'm <00:37:14.325>having <00:37:14.424>each <00:37:14.524>of <00:37:14.625>the <00:37:14.725>servers

616
00:37:17.555 --> 00:37:21.005
<00:37:17.555>loading <00:37:17.754>the <00:37:17.955>records <00:37:18.154>they <00:37:18.355>own <00:37:18.555>across <00:37:18.754>a, <00:37:18.955>um,

617
00:37:21.245 --> 00:37:25.325
<00:37:21.245>a <00:37:21.352>variety <00:37:21.460>of <00:37:21.568>different <00:37:21.675>records <00:37:21.783>and <00:37:21.891>bring <00:37:21.998>them <00:37:22.106>back <00:37:22.214>in <00:37:22.321>parallel <00:37:22.429>to <00:37:22.537>my <00:37:22.645>client.

618
00:37:25.945 --> 00:37:30.605
<00:37:25.945>Now <00:37:26.052>because <00:37:26.160>it's <00:37:26.268>all <00:37:26.375>done <00:37:26.483>in <00:37:26.591>parallel, <00:37:26.698>that <00:37:26.806>means <00:37:26.914>that <00:37:27.021>my <00:37:27.129>worst <00:37:27.237>case, <00:37:27.345>um,

619
00:37:30.915 --> 00:37:35.845
<00:37:30.915>time <00:37:31.008>basically <00:37:31.101>falls <00:37:31.195>down <00:37:31.288>to <00:37:31.381>the <00:37:31.475>worst <00:37:31.568>case <00:37:31.661>of <00:37:31.755>a <00:37:31.848>single <00:37:31.941>read <00:37:32.035>off <00:37:32.128>an <00:37:32.221>SSD. <00:37:32.315>Um,

620
00:37:35.985 --> 00:37:36.965
<00:37:35.985>and <00:37:36.279>that's <00:37:36.573>pretty <00:37:36.867>fast.

621
00:37:38.345 --> 00:37:41.645
<00:37:38.345>So <00:37:38.461>to <00:37:38.578>compare <00:37:38.694>and <00:37:38.811>contrast <00:37:38.928>with <00:37:39.044>the <00:37:39.161>code <00:37:39.278>we <00:37:39.395>saw <00:37:39.511>for <00:37:39.628>relational <00:37:39.745>database,

622
00:37:42.195 --> 00:37:46.085
<00:37:42.195>this <00:37:42.302>is <00:37:42.410>my <00:37:42.518>code <00:37:42.625>to <00:37:42.733>retrieve <00:37:42.841>from <00:37:42.948>Aerospike. <00:37:43.056>Um, <00:37:43.164>and <00:37:43.271>it's <00:37:43.379>all <00:37:43.487>open <00:37:43.595>source.

623
00:37:46.085 --> 00:37:50.125
<00:37:46.085>So <00:37:46.178>this <00:37:46.271>is <00:37:46.365>all <00:37:46.458>in <00:37:46.551>that, <00:37:46.645>um, <00:37:46.738>uh, <00:37:46.831>GitHub <00:37:46.925>link <00:37:47.018>that <00:37:47.111>I <00:37:47.205>sent <00:37:47.298>or <00:37:47.391>showed <00:37:47.485>earlier.

624
00:37:51.065 --> 00:37:54.845
<00:37:51.065>So <00:37:51.138>you <00:37:51.212>can <00:37:51.286>see <00:37:51.359>I've <00:37:51.433>got <00:37:51.507>my <00:37:51.580>30 <00:37:51.654>days. <00:37:51.728>I <00:37:51.801>go <00:37:51.875>and <00:37:51.949>create <00:37:52.022>a <00:37:52.096>set <00:37:52.170>of <00:37:52.243>keys <00:37:52.317>for <00:37:52.391>30 <00:37:52.465>days.

625
00:37:55.525 --> 00:37:56.925
<00:37:55.525>I <00:37:55.777>go <00:37:56.029>and <00:37:56.281>read <00:37:56.533>my <00:37:56.785>record.

626
00:37:57.145 --> 00:38:01.365
<00:37:57.145>So <00:37:57.232>it's <00:37:57.320>a <00:37:57.407>single <00:37:57.495>call <00:37:57.582>I've <00:37:57.670>given <00:37:57.757>up <00:37:57.845>with <00:37:57.932>30 <00:37:58.020>keys <00:37:58.107>and <00:37:58.195>it's <00:37:58.282>gonna <00:37:58.370>get <00:37:58.457>me <00:37:58.545>30

627
00:38:01.365 --> 00:38:02.065
records.

628
00:38:02.065 --> 00:38:04.245
<00:38:02.065>The <00:38:02.158>fact <00:38:02.251>that <00:38:02.345>I'm <00:38:02.438>just <00:38:02.531>going <00:38:02.625>off <00:38:02.718>and <00:38:02.811>doing <00:38:02.905>a <00:38:02.998>whole <00:38:03.091>bunch <00:38:03.185>of <00:38:03.278>work <00:38:03.371>behind <00:38:03.465>the

629
00:38:04.245 --> 00:38:06.205
<00:38:04.245>scenes <00:38:04.444>and <00:38:04.645>doing <00:38:04.845>scatter <00:38:05.045>gather <00:38:05.245>across <00:38:05.444>a <00:38:05.645>cluster,

630
00:38:06.575 --> 00:38:08.885
<00:38:06.575>bring <00:38:06.774>results <00:38:06.975>back <00:38:07.174>in <00:38:07.375>parallel, <00:38:07.575>merging <00:38:07.774>them <00:38:07.975>together,

631
00:38:09.065 --> 00:38:10.165
<00:38:09.065>that's <00:38:09.312>all <00:38:09.560>hidden <00:38:09.807>from <00:38:10.055>me.

632
00:38:10.805 --> 00:38:15.555
<00:38:10.805>I <00:38:10.932>then <00:38:11.059>go <00:38:11.186>and <00:38:11.314>iterate <00:38:11.441>through <00:38:11.568>that <00:38:11.695>and <00:38:11.823>create <00:38:11.950>my <00:38:12.077>transactions. <00:38:12.205>Okay,

633
00:38:15.865 --> 00:38:19.955
<00:38:15.865>what <00:38:16.004>does <00:38:16.145>this <00:38:16.285>look <00:38:16.424>like? <00:38:16.564>Well, <00:38:16.705>it's <00:38:16.845>better. <00:38:16.984>A <00:38:17.125>lot <00:38:17.265>better.

634
00:38:21.545 --> 00:38:24.205
<00:38:21.545>So <00:38:21.745>you <00:38:21.945>can <00:38:22.145>see <00:38:22.345>that <00:38:22.545>my <00:38:22.745>latency <00:38:22.945>here,

635
00:38:24.385 --> 00:38:27.285
<00:38:24.385>my <00:38:24.618>average <00:38:24.851>latency <00:38:25.085>is <00:38:25.318>about <00:38:25.551>400 <00:38:25.785>microseconds.

636
00:38:28.545 --> 00:38:31.485
<00:38:28.545>My <00:38:28.825>95th <00:38:29.105>percentile <00:38:29.385>is <00:38:29.665>sub <00:38:29.945>millisecond.

637
00:38:32.785 --> 00:38:36.925
<00:38:32.785>My <00:38:33.018>99th <00:38:33.251>percentile <00:38:33.484>is <00:38:33.718>about <00:38:33.951>1.4 <00:38:34.185>milliseconds.

638
00:38:37.625 --> 00:38:41.615
<00:38:37.625>So <00:38:37.765>in, <00:38:37.905>sorry, <00:38:38.045>the <00:38:38.185>throughput <00:38:38.325>is <00:38:38.465>about <00:38:38.605>70,000 <00:38:38.745>transactions <00:38:38.885>a <00:38:39.025>second.

639
00:38:42.075 --> 00:38:44.575
<00:38:42.075>So <00:38:42.230>by <00:38:42.386>changing <00:38:42.541>my <00:38:42.697>data <00:38:42.852>model <00:38:43.008>in <00:38:43.163>a <00:38:43.319>NoSQL <00:38:43.475>world,

640
00:38:45.135 --> 00:38:47.215
<00:38:45.135>I <00:38:45.415>have <00:38:45.695>done <00:38:45.975>a <00:38:46.255>vast <00:38:46.535>improvement.

641
00:38:47.215 --> 00:38:50.175
<00:38:47.215>It's <00:38:47.331>really <00:38:47.448>designed <00:38:47.565>for <00:38:47.681>these <00:38:47.798>primary <00:38:47.915>key <00:38:48.031>reads <00:38:48.148>instead <00:38:48.265>of <00:38:48.381>that <00:38:48.498>scatter <00:38:48.615>gather

642
00:38:50.175 --> 00:38:53.785
<00:38:50.175>across <00:38:50.408>the <00:38:50.641>cluster. <00:38:50.875>This, <00:38:51.108>I <00:38:51.341>mean <00:38:51.575>the,

643
00:38:53.925 --> 00:38:57.865
<00:38:53.925>the <00:38:54.052>time <00:38:54.179>I'm <00:38:54.306>loading <00:38:54.434>is <00:38:54.561>almost <00:38:54.688>negligible <00:38:54.815>compared <00:38:54.943>to <00:38:55.070>that <00:38:55.197>120 <00:38:55.325>milliseconds.

644
00:38:58.265 --> 00:39:02.545
<00:38:58.265>I <00:38:58.352>can <00:38:58.440>now <00:38:58.527>load <00:38:58.615>a <00:38:58.702>lot <00:38:58.790>more <00:38:58.877>data <00:38:58.964>or <00:38:59.052>I <00:38:59.140>can <00:38:59.227>give <00:38:59.315>more <00:38:59.402>of <00:38:59.490>that <00:38:59.577>time <00:38:59.665>slice

645
00:39:03.055 --> 00:39:04.625
<00:39:03.055>back <00:39:03.521>to <00:39:03.988>the, <00:39:04.455>um,

646
00:39:05.265 --> 00:39:08.065
<00:39:05.265>analysis <00:39:05.404>engine <00:39:05.545>to <00:39:05.685>make <00:39:05.825>sure <00:39:05.964>that <00:39:06.105>this <00:39:06.245>isn't <00:39:06.384>fraudulent <00:39:06.525>or <00:39:06.665>not.

647
00:39:08.695 --> 00:39:12.345
<00:39:08.695>Some <00:39:08.835>of <00:39:08.975>that <00:39:09.115>came <00:39:09.255>from <00:39:09.395>aerospike's <00:39:09.535>optimized <00:39:09.675>for <00:39:09.815>primary <00:39:09.955>care <00:39:10.095>reads.

648
00:39:12.615 --> 00:39:15.505
<00:39:12.615>Some <00:39:12.754>of <00:39:12.895>it <00:39:13.035>came <00:39:13.174>from <00:39:13.314>that <00:39:13.455>merging <00:39:13.595>of <00:39:13.734>records <00:39:13.875>back <00:39:14.015>together.

649
00:39:16.485 --> 00:39:20.495
<00:39:16.485>The <00:39:16.640>other <00:39:16.796>nice <00:39:16.951>thing <00:39:17.107>is <00:39:17.262>Aerospike <00:39:17.418>doesn't <00:39:17.573>catch <00:39:17.729>the <00:39:17.885>records.

650
00:39:20.745 --> 00:39:22.215
<00:39:20.745>These <00:39:21.009>records <00:39:21.274>are <00:39:21.538>coming <00:39:21.803>off <00:39:22.068>drive.

651
00:39:22.235 --> 00:39:24.775
<00:39:22.235>So <00:39:22.390>we <00:39:22.546>saw <00:39:22.701>that <00:39:22.857>degradation <00:39:23.012>in <00:39:23.168>performance <00:39:23.323>that <00:39:23.479>Postgres <00:39:23.635>had.

652
00:39:25.515 --> 00:39:26.815
<00:39:25.515>If <00:39:25.807>I'm <00:39:26.100>using <00:39:26.392>Aerospike, <00:39:26.685>however,

653
00:39:27.475 --> 00:39:32.415
<00:39:27.475>I'm <00:39:27.602>reading <00:39:27.729>those <00:39:27.856>records <00:39:27.984>directly <00:39:28.111>off <00:39:28.238>the <00:39:28.365>drive <00:39:28.493>in <00:39:28.620>this <00:39:28.747>test <00:39:28.875>and

654
00:39:32.415 --> 00:39:34.135
<00:39:32.415>therefore <00:39:32.765>there <00:39:33.115>is <00:39:33.465>no <00:39:33.815>warmup,

655
00:39:34.135 --> 00:39:38.055
<00:39:34.135>there's <00:39:34.235>none <00:39:34.335>of <00:39:34.435>that <00:39:34.535>variability <00:39:34.635>of <00:39:34.735>latency <00:39:34.835>we <00:39:34.935>saw <00:39:35.035>with <00:39:35.135>Postgres <00:39:35.235>where <00:39:35.335>if <00:39:35.435>it <00:39:35.535>was

656
00:39:38.275 --> 00:39:40.655
<00:39:38.275>on <00:39:38.430>drive, <00:39:38.586>I <00:39:38.741>got <00:39:38.897>terrible <00:39:39.052>performance. <00:39:39.208>If <00:39:39.363>it's <00:39:39.519>in <00:39:39.675>memory,

657
00:39:40.925 --> 00:39:42.135
<00:39:40.925>then <00:39:41.197>I <00:39:41.469>got <00:39:41.741>good <00:39:42.014>performance.

658
00:39:42.885 --> 00:39:46.335
<00:39:42.885>This <00:39:43.001>is <00:39:43.118>as <00:39:43.235>every <00:39:43.351>one <00:39:43.468>of <00:39:43.585>those <00:39:43.701>records <00:39:43.818>is <00:39:43.935>being <00:39:44.051>read <00:39:44.168>off <00:39:44.285>drive.

659
00:39:46.395 --> 00:39:49.895
<00:39:46.395>So <00:39:46.535>it's <00:39:46.675>a <00:39:46.815>very <00:39:46.955>efficient <00:39:47.095>way <00:39:47.235>of <00:39:47.375>loading <00:39:47.515>the <00:39:47.655>data. <00:39:47.795>Now,

660
00:39:49.895 --> 00:39:53.655
<00:39:49.895>grouping <00:39:50.022>the <00:39:50.149>records <00:39:50.276>together <00:39:50.404>like <00:39:50.531>that <00:39:50.658>can <00:39:50.785>also <00:39:50.913>apply <00:39:51.040>to <00:39:51.167>relational <00:39:51.295>databases.

661
00:39:54.135 --> 00:39:58.975
<00:39:54.135>I <00:39:54.235>can <00:39:54.335>put <00:39:54.435>that <00:39:54.535>into <00:39:54.635>AJB <00:39:54.735>blob <00:39:54.835>if <00:39:54.935>I'm <00:39:55.035>using <00:39:55.135>a <00:39:55.235>database <00:39:55.335>that <00:39:55.435>supports <00:39:55.535>it

662
00:39:59.355 --> 00:40:01.895
<00:39:59.355>and <00:39:59.510>merge <00:39:59.666>it <00:39:59.821>that <00:39:59.977>way <00:40:00.132>and <00:40:00.288>does <00:40:00.443>get <00:40:00.599>better <00:40:00.755>results.

663
00:40:01.965 --> 00:40:04.375
<00:40:01.965>It's <00:40:02.105>not <00:40:02.245>quite <00:40:02.385>as <00:40:02.525>staggering <00:40:02.665>as <00:40:02.805>the <00:40:02.945>results <00:40:03.085>we're <00:40:03.225>seeing <00:40:03.365>here,

664
00:40:04.555 --> 00:40:05.455
<00:40:04.555>but <00:40:04.690>that <00:40:04.825>can <00:40:04.960>be <00:40:05.095>a <00:40:05.230>bit <00:40:05.365>better.

665
00:40:05.675 --> 00:40:09.415
<00:40:05.675>But <00:40:05.802>it's <00:40:05.929>sort <00:40:06.056>of <00:40:06.184>counterintuitive <00:40:06.311>to <00:40:06.438>the <00:40:06.565>way <00:40:06.693>you <00:40:06.820>typically <00:40:06.947>relational <00:40:07.075>model

666
00:40:09.415 --> 00:40:10.248
things.

667
00:40:12.295 --> 00:40:16.075
<00:40:12.295>So <00:40:12.411>many <00:40:12.528>people <00:40:12.645>haven't <00:40:12.761>heard <00:40:12.878>of <00:40:12.995>Aerospike. <00:40:13.111>If <00:40:13.228>you <00:40:13.345>want <00:40:13.461>to <00:40:13.578>get <00:40:13.695>started,

668
00:40:16.095 --> 00:40:17.995
<00:40:16.095>if <00:40:16.222>you <00:40:16.349>want <00:40:16.476>to <00:40:16.604>look <00:40:16.731>at <00:40:16.858>Aerospike <00:40:16.985>and <00:40:17.113>get <00:40:17.240>started <00:40:17.367>with <00:40:17.495>it,

669
00:40:18.265 --> 00:40:21.315
<00:40:18.265>then <00:40:18.381>it's <00:40:18.498>really <00:40:18.615>easy <00:40:18.731>to <00:40:18.848>do. <00:40:18.964>Um, <00:40:19.081>there's <00:40:19.198>a <00:40:19.315>number <00:40:19.431>of <00:40:19.548>links <00:40:19.665>here.

670
00:40:21.495 --> 00:40:24.955
<00:40:21.495>We <00:40:21.595>can <00:40:21.694>just <00:40:21.795>come <00:40:21.895>onto <00:40:21.995>the <00:40:22.095>website <00:40:22.194>and <00:40:22.295>there's <00:40:22.395>a <00:40:22.495>sandbox <00:40:22.595>we <00:40:22.694>can <00:40:22.795>actually <00:40:22.895>play

671
00:40:24.955 --> 00:40:25.835
<00:40:24.955>with <00:40:25.351>it. <00:40:25.747>Um,

672
00:40:25.865 --> 00:40:30.235
<00:40:25.865>it's <00:40:25.964>a <00:40:26.064>very <00:40:26.165>powerful <00:40:26.265>tool <00:40:26.365>and <00:40:26.464>very <00:40:26.564>worthwhile <00:40:26.665>if <00:40:26.765>you've <00:40:26.865>got <00:40:26.964>these <00:40:27.064>sort <00:40:27.165>of <00:40:27.265>real

673
00:40:30.235 --> 00:40:32.675
<00:40:30.235>time <00:40:30.515>needs <00:40:30.795>of <00:40:31.075>very <00:40:31.355>fast <00:40:31.635>data.

674
00:40:35.395 --> 00:40:38.365
<00:40:35.395>Last <00:40:35.482>thing <00:40:35.570>I <00:40:35.657>want <00:40:35.745>to <00:40:35.832>leave <00:40:35.920>you <00:40:36.007>with <00:40:36.095>is <00:40:36.182>if <00:40:36.270>you <00:40:36.357>do <00:40:36.445>play <00:40:36.532>with <00:40:36.620>Aerospike <00:40:36.707>and <00:40:36.795>you're

675
00:40:38.365 --> 00:40:41.445
<00:40:38.365>interested <00:40:38.481>in <00:40:38.598>finding <00:40:38.714>out <00:40:38.831>more <00:40:38.948>or <00:40:39.064>you <00:40:39.181>want <00:40:39.298>to, <00:40:39.415>um, <00:40:39.531>ask <00:40:39.648>any <00:40:39.765>questions,

676
00:40:41.745 --> 00:40:42.885
<00:40:41.745>we <00:40:42.001>have <00:40:42.258>a <00:40:42.514>Discord <00:40:42.771>community.

677
00:40:42.915 --> 00:40:46.725
<00:40:42.915>It's <00:40:43.042>for <00:40:43.169>developers <00:40:43.296>like <00:40:43.424>myself <00:40:43.551>talking <00:40:43.678>to <00:40:43.805>developers <00:40:43.933>like <00:40:44.060>yourselves <00:40:44.187>and <00:40:44.315>would

678
00:40:46.725 --> 00:40:48.525
<00:40:46.725>love <00:40:46.958>to <00:40:47.191>hear <00:40:47.424>from <00:40:47.658>you. <00:40:47.891>A <00:40:48.125>um,

679
00:40:48.625 --> 00:40:52.085
<00:40:48.625>any <00:40:48.741>questions <00:40:48.858>would <00:40:48.975>be <00:40:49.091>greatly <00:40:49.208>appreciated <00:40:49.325>or <00:40:49.441>any <00:40:49.558>thoughts <00:40:49.675>or <00:40:49.791>comments <00:40:49.908>I <00:40:50.025>would

680
00:40:52.085 --> 00:40:55.965
<00:40:52.085>love <00:40:52.178>to <00:40:52.271>hear <00:40:52.365>from <00:40:52.458>you. <00:40:52.551>Thank <00:40:52.645>you <00:40:52.738>for <00:40:52.831>listening. <00:40:52.925>I <00:40:53.018>hope <00:40:53.111>this <00:40:53.205>has <00:40:53.298>been <00:40:53.391>useful. <00:40:53.485>Um,

681
00:40:55.965 --> 00:41:00.485
<00:40:55.965>there's <00:40:56.081>a <00:40:56.198>big <00:40:56.315>difference <00:40:56.431>in <00:40:56.548>the <00:40:56.665>way <00:40:56.781>our <00:40:56.898>world <00:40:57.015>is <00:40:57.131>moving <00:40:57.248>with <00:40:57.365>data.

682
00:41:00.865 --> 00:41:03.325
<00:41:00.865>It <00:41:01.020>used <00:41:01.176>to <00:41:01.331>be <00:41:01.487>loading <00:41:01.642>a <00:41:01.798>single <00:41:01.953>record <00:41:02.109>was <00:41:02.265>fine,

683
00:41:03.325 --> 00:41:05.165
<00:41:03.325>loading <00:41:03.524>a <00:41:03.725>small <00:41:03.924>set <00:41:04.125>of <00:41:04.325>records <00:41:04.524>was <00:41:04.725>fine,

684
00:41:05.945 --> 00:41:10.595
<00:41:05.945>but <00:41:06.032>now <00:41:06.120>we <00:41:06.207>want <00:41:06.295>to <00:41:06.382>be <00:41:06.470>able <00:41:06.557>to <00:41:06.645>load <00:41:06.732>hundreds <00:41:06.820>of <00:41:06.907>thousands <00:41:06.995>of <00:41:07.082>records <00:41:07.170>in <00:41:07.257>real <00:41:07.345>time

685
00:41:10.835 --> 00:41:14.355
<00:41:10.835>milliseconds. <00:41:11.035>And <00:41:11.235>that <00:41:11.435>is <00:41:11.635>difficult <00:41:11.835>to <00:41:12.035>do. <00:41:12.235>Um,

686
00:41:14.815 --> 00:41:18.475
<00:41:14.815>and <00:41:14.955>so <00:41:15.095>that's <00:41:15.235>why <00:41:15.375>people <00:41:15.515>are <00:41:15.655>moving <00:41:15.795>more <00:41:15.935>and <00:41:16.075>more. <00:41:16.215>Um,

687
00:41:18.825 --> 00:41:22.795
<00:41:18.825>some <00:41:18.932>of <00:41:19.040>the <00:41:19.148>workloads <00:41:19.255>on <00:41:19.363>relational <00:41:19.471>to <00:41:19.578>no <00:41:19.686>sql, <00:41:19.794>no <00:41:19.901>SQL <00:41:20.009>is <00:41:20.117>not <00:41:20.225>perfect,

688
00:41:22.965 --> 00:41:25.955
<00:41:22.965>can't <00:41:23.081>do <00:41:23.198>all <00:41:23.315>those <00:41:23.431>relational <00:41:23.548>joins <00:41:23.665>and <00:41:23.781>everything <00:41:23.898>you're <00:41:24.015>used <00:41:24.131>to <00:41:24.248>in <00:41:24.365>a

689
00:41:25.955 --> 00:41:26.795
<00:41:25.955>relational <00:41:26.711>world.

690
00:41:27.615 --> 00:41:31.075
<00:41:27.615>But <00:41:27.714>what <00:41:27.814>I <00:41:27.915>hope <00:41:28.015>this <00:41:28.115>has <00:41:28.214>shown <00:41:28.314>you <00:41:28.415>is <00:41:28.515>that <00:41:28.615>there's <00:41:28.714>different <00:41:28.814>ways <00:41:28.915>of <00:41:29.015>modeling

691
00:41:31.135 --> 00:41:32.795
<00:41:31.135>the <00:41:31.485>data <00:41:31.835>and <00:41:32.185>that <00:41:32.535>different

692
00:41:33.005 --> 00:41:37.605
<00:41:33.005>Problems <00:41:33.132>call <00:41:33.259>for <00:41:33.386>different <00:41:33.514>sort <00:41:33.641>of <00:41:33.768>databases <00:41:33.895>and <00:41:34.023>different <00:41:34.150>use <00:41:34.277>cases <00:41:34.405>require

693
00:41:37.605 --> 00:41:39.765
<00:41:37.605>different <00:41:37.745>solutions. <00:41:37.885>And <00:41:38.025>there's <00:41:38.165>tools <00:41:38.305>out <00:41:38.445>there <00:41:38.585>that <00:41:38.725>can <00:41:38.865>solve <00:41:39.005>them.

694
00:41:40.145 --> 00:41:41.525
<00:41:40.145>But <00:41:40.393>there <00:41:40.641>is <00:41:40.890>no <00:41:41.138>perfect <00:41:41.387>database,

695
00:41:42.185 --> 00:41:46.085
<00:41:42.185>no <00:41:42.285>database <00:41:42.384>can <00:41:42.485>solve <00:41:42.585>every <00:41:42.685>different <00:41:42.785>use <00:41:42.884>case <00:41:42.985>that <00:41:43.085>we <00:41:43.185>have <00:41:43.285>in <00:41:43.384>the <00:41:43.485>industries <00:41:43.585>at

696
00:41:46.085 --> 00:41:48.325
<00:41:46.085>the <00:41:46.285>moment. <00:41:46.485>Thank <00:41:46.685>you. <00:41:46.885>I <00:41:47.085>appreciate <00:41:47.285>your <00:41:47.485>time.