1
00:00:01,000 --> 00:00:04,759
How'd you like to listen to dot
net rocks with no ads? Easy?

2
00:00:05,320 --> 00:00:09,880
Become a patron For just five dollars
a month you get access to a private

3
00:00:10,000 --> 00:00:14,359
RSS feed where all the shows have
no ads. Twenty dollars a month will

4
00:00:14,400 --> 00:00:18,800
get you that and a special dot
net Rocks patron mug. Sign up now

5
00:00:18,839 --> 00:00:24,199
at Patreon dot dot net rocks dot
com. Hey Carlin Richard here. As

6
00:00:24,199 --> 00:00:29,519
you may have heard, NDC is
back offering their incredible in person conferences around

7
00:00:29,559 --> 00:00:33,960
the world, and we'd like to
tell you about them. NDC Copenhagen is

8
00:00:34,000 --> 00:00:39,600
happening August twenty seventh through the thirty
first. Go to NDC Copenhagen dot com

9
00:00:39,799 --> 00:00:44,960
for more information. NDC Porto is
happening October sixteenth through the twentieth. The

10
00:00:45,039 --> 00:00:50,039
early bird discount for ADC Porto ends
July twenty first. Go to Dcporto dot

11
00:00:50,039 --> 00:00:55,320
com to register and check out the
full lineup of conferences at NDC Conferences dot

12
00:00:55,320 --> 00:00:59,719
com. Hey there, this is
Jeff Fritz, the purple blazer guy from

13
00:00:59,759 --> 00:01:03,759
like or Soft, letting you in
on a little secret about my friend Carl

14
00:01:03,799 --> 00:01:07,920
Franklin. You know, the guy
who started dot net rocks, the first

15
00:01:07,920 --> 00:01:11,799
podcast about dot Net in two thousand
and two. The guy who's been teaching

16
00:01:11,840 --> 00:01:18,599
Blazer on YouTube since twenty twenty,
Yeah, that Carl Franklin. Well,

17
00:01:18,959 --> 00:01:22,640
Carl's joined up with the folks from
Code in a Castle to teach a week

18
00:01:22,760 --> 00:01:26,120
long hands on Blazer class at Are
you Ready to Get This? At a

19
00:01:26,239 --> 00:01:34,200
castle slash villa in Tuscany. It's
sort of a luxury vacation with Blazer learning

20
00:01:34,280 --> 00:01:41,359
built in. Carl's calling it the
Blazer master Class. You'll learn Blazer from

21
00:01:41,359 --> 00:01:45,680
the ground up, finishing the week
with the ability to build and deploy Blazer

22
00:01:45,719 --> 00:01:51,120
applications. Since the training happens for
only four hours in the morning over six

23
00:01:51,200 --> 00:01:55,680
days, you can bring your significant
other, your partner with you and you

24
00:01:55,719 --> 00:02:00,319
should right This part of Italy is
absolutely beautiful. There's so much to see

25
00:02:00,400 --> 00:02:07,159
and do, and in Larion Marco
from Code into Castle are organizing daily activities

26
00:02:07,200 --> 00:02:10,759
both at the castle and in the
area. The castle is in the Marema,

27
00:02:10,840 --> 00:02:16,319
a less touristed region of Tuscany,
offering both classic Tuscan hill country as

28
00:02:16,319 --> 00:02:22,759
well as easy access to the Etruscan
Riviera, with sublime local food, wine

29
00:02:23,039 --> 00:02:28,120
and olive oil around every corner.
Breakfast is included. Every day there will

30
00:02:28,120 --> 00:02:31,479
be two communal dinners at the castle
book ending the experience, and most other

31
00:02:31,560 --> 00:02:37,919
meals and all activities are included.
And did I mention you'll learn Blazer in

32
00:02:38,080 --> 00:02:43,159
person from Carl Franklin. Listen,
space is limited and for very good reason.

33
00:02:43,439 --> 00:02:47,560
This is quality training in a beautiful
setting. Go to code in Acastle

34
00:02:47,719 --> 00:02:54,840
dot com slash Blazer twenty twenty three
that's b L A z R two zero

35
00:02:55,000 --> 00:03:00,560
two three to take advantage of this
amazing opportunity to join Carl in Tuscany for

36
00:03:00,599 --> 00:03:07,800
an unforgettable week of La dolce vita
while advancing your programming skills in this important

37
00:03:07,879 --> 00:03:24,360
new technology. Hey guess what,
it's dot net rocks. Welcome back.

38
00:03:24,360 --> 00:03:29,240
I'm Carl Franklin and I'm Richard Cavill
and our old friend Ted Newer to see

39
00:03:29,280 --> 00:03:30,280
her. We're going to introduce him
in a few minutes. But first,

40
00:03:30,439 --> 00:03:35,000
dude, what's up all sorts of
things happening in your neck of the woods,

41
00:03:35,319 --> 00:03:38,400
particularly your neighborhood. What happened?
Well, yeah, well, you

42
00:03:38,439 --> 00:03:42,879
know, we were getting to a
weird place with where do you want to

43
00:03:42,960 --> 00:03:45,039
live? What do you want to
do? You know, what I realized

44
00:03:45,039 --> 00:03:47,800
in hindsight is that the old dog
passed away about a year ago, right,

45
00:03:47,879 --> 00:03:51,000
and so it's just been the two
of us in the house. We

46
00:03:51,080 --> 00:03:55,840
went from dog kat and two daughters
in February of twenty twenty to jest us

47
00:03:55,919 --> 00:04:00,240
by March of twenty twenty two.
And then there was two daughters and a

48
00:04:00,240 --> 00:04:01,960
boyfriend. Right. Well, they
weren't here for very long. They went

49
00:04:01,960 --> 00:04:04,479
off into their own places. Now, husband, right, they're all they're

50
00:04:04,520 --> 00:04:06,719
all done. But it's like the
two of us in this house is a

51
00:04:06,800 --> 00:04:11,240
house built to raise a family in. Yeah, and as much as we

52
00:04:11,280 --> 00:04:14,120
love it and we built it like
it fits us in a lot of ways,

53
00:04:14,159 --> 00:04:15,160
it's a lot of house. And
as soon as we started talking in

54
00:04:15,240 --> 00:04:19,920
terms of not having this house,
immediately we're talking about building another one.

55
00:04:20,000 --> 00:04:24,240
So so you didn't think about,
you know, taking one of the rooms

56
00:04:24,279 --> 00:04:28,120
and making it all stainless steel and
putting a villain chair in it, and

57
00:04:28,160 --> 00:04:30,920
you know, having multiple monitors.
Well, to be clear, we had

58
00:04:30,920 --> 00:04:35,959
a room for restoring looms, like
that's the place we were at. There

59
00:04:36,040 --> 00:04:39,839
was a loom room, which by
the way, had its own on suite

60
00:04:39,839 --> 00:04:42,759
in case we needed to go to
the bathroom so that we have too much

61
00:04:42,800 --> 00:04:46,079
space. Two house is amazing.
It is a great house, and and

62
00:04:46,160 --> 00:04:50,160
the buyers are a young family with
two teenagers. Like it's a perfect replacement.

63
00:04:50,439 --> 00:04:55,360
We're moving to the coast full time. I suspect we'll build something eventually,

64
00:04:55,560 --> 00:04:59,920
but yeah, we're ready to simplify
a little and OK with it.

65
00:05:00,120 --> 00:05:02,519
I'm really happy. And then my
neighbors are quite annoyed with us, But

66
00:05:02,600 --> 00:05:05,439
that's okay because well it's a tight
knit neighborhood. As you know, you've

67
00:05:05,480 --> 00:05:10,560
been here. I remember the parties
and stuff, and I actually attended one

68
00:05:10,600 --> 00:05:13,639
where all the neighbors came over.
And that's a really cool thing, you

69
00:05:13,680 --> 00:05:17,560
know, because not everybody has neighbors
that just get together for you know,

70
00:05:17,720 --> 00:05:23,040
special events like sunsets, yep um, you know, and and all through

71
00:05:23,079 --> 00:05:26,680
the pandemic when we'd go all come
out on our driveways at six o'clock with

72
00:05:26,720 --> 00:05:30,360
a glass of wine. Yeah,
you know, that's nice toast each other

73
00:05:30,399 --> 00:05:32,519
and go back in hek. I
love this place, and now you can

74
00:05:32,560 --> 00:05:35,439
do that with the otters. Yeah. I would also say there's a couple

75
00:05:35,480 --> 00:05:39,879
of my neighbors literally in the cul
de Sac that have places on the coast

76
00:05:39,879 --> 00:05:45,160
as well, so they are entirely
possible to be retiring up there themselves sometime

77
00:05:45,199 --> 00:05:47,279
in the future. Not that I'm
retiring, or arguably I am retired.

78
00:05:47,360 --> 00:05:50,639
This is me goofing off. What
is this word you speak of? Retire?

79
00:05:50,759 --> 00:05:53,759
Right? Don't? I don't even
know what to talk to tell you

80
00:05:53,800 --> 00:05:57,560
anymore? Right, I don't know
what you're talking. That's nonsense anyway.

81
00:05:57,720 --> 00:06:00,680
But you know you would think by
getting rid of a house my project list

82
00:06:00,680 --> 00:06:03,199
would get shorter. You would be
incorrect, sir. So it's like,

83
00:06:03,759 --> 00:06:06,439
yeah, now you got to clean
it all up, and there's just not

84
00:06:06,639 --> 00:06:10,680
enough automation up on the coast.
There's some automation on the coast, but

85
00:06:10,720 --> 00:06:14,639
there could be much more automation on
the game. All right, well,

86
00:06:14,759 --> 00:06:18,920
enough of that fascinating chit chat.
Let's get to uh that's laughing. Let's

87
00:06:18,959 --> 00:06:30,680
get to better know a framework.
Boom awesome. All right, man.

88
00:06:30,639 --> 00:06:32,920
You know, as if I didn't
have enough to do, I started a

89
00:06:32,959 --> 00:06:36,439
new freaking YouTube show. Are you
out of controller? What? I'm out

90
00:06:36,439 --> 00:06:40,800
of my mind? I don't know. Everybody's like, hey, is your

91
00:06:40,920 --> 00:06:45,839
marriage okay? You're like, you're
like spending more time making shows than you

92
00:06:45,839 --> 00:06:47,920
are with your wife. And she
might tell you that's true, but I

93
00:06:47,920 --> 00:06:50,959
don't think so. But anyway,
I mean, the thing is you're recording

94
00:06:51,000 --> 00:06:55,319
from your house these days. Yeah, it's not like you're gone, you

95
00:06:55,439 --> 00:06:59,120
just it's yeah, it's you're just
in a little box full of foam,

96
00:06:59,199 --> 00:07:06,240
that's right, and in a microphone. Some fallome in a microphone, little

97
00:07:06,240 --> 00:07:10,600
webcam. But um yeah, So
the thing is this and I got this

98
00:07:10,680 --> 00:07:14,560
stuff down to a science. It's
all automatic as much as I yeah,

99
00:07:14,560 --> 00:07:18,279
I know what I'm now. When
a good topic comes along, such as

100
00:07:18,480 --> 00:07:25,279
AI bots, and I have friends
that have been into it since the very

101
00:07:25,319 --> 00:07:30,079
beginning and they've done some amazing things, a show happens. So it's yeah,

102
00:07:30,439 --> 00:07:34,000
it's the AI Bought Show with me
and Brian McKay. And Brian McKay

103
00:07:34,120 --> 00:07:39,560
is one of our app next guys. He's extremely smart and extremely resourceful.

104
00:07:40,720 --> 00:07:46,000
Um yeah, So anyway, it's
at the aibot show dot com. There

105
00:07:46,000 --> 00:07:49,399
should be at least three episodes up
there. In introduction to chat GPT,

106
00:07:49,959 --> 00:07:55,800
and then in the second one we
talked about prompt engineering and we used the

107
00:07:55,879 --> 00:08:05,360
GPT API playground to write a little
three act play basically, or a three

108
00:08:05,399 --> 00:08:11,519
act screenplay. Everything from it helping
us find the topic and the characters and

109
00:08:11,160 --> 00:08:16,319
the conflicts. And you know,
we basically started with a one paragraph story

110
00:08:16,360 --> 00:08:20,040
premise and then you know, got
from different acts and the beats and the

111
00:08:20,079 --> 00:08:26,120
scenes, and I mean sort of
that's classic writer brainstorming technique exactly. Yeah.

112
00:08:26,600 --> 00:08:28,519
Here you're you're storming with a piece
of software, right, and he

113
00:08:28,600 --> 00:08:31,960
basically has this idea where you take
the key ideas that you get, You

114
00:08:33,000 --> 00:08:35,799
say, give me five ideas,
you take the one you want, you

115
00:08:35,840 --> 00:08:39,399
add it to the system prompt,
which is sort of the backstory, and

116
00:08:39,840 --> 00:08:43,480
then it continues generating from there.
It's just fascinating to me. Yeah,

117
00:08:43,480 --> 00:08:46,000
that's awesome stuff. AI bought show
dot com. No, it learned to

118
00:08:46,000 --> 00:08:48,879
love it. Who's talking to us
today, Richard Campbell, You're gonna love

119
00:08:48,919 --> 00:08:54,559
this. I grabbed a comment of
a show ten eighty five, so that's

120
00:08:54,879 --> 00:08:58,039
January of twenty fifteen. It is
disturbing to me to say twenty fifteen and

121
00:08:58,200 --> 00:09:01,200
say eight years ago, but geez, and this is a show we did

122
00:09:01,240 --> 00:09:07,360
with David Simons. When I just
called it different databases, right, because

123
00:09:07,360 --> 00:09:11,639
it's really you know, early in
a lot of those conversations too about where

124
00:09:11,639 --> 00:09:16,120
the sequel no sequel, like who
cares and generated a ton of comments at

125
00:09:16,120 --> 00:09:18,440
the time I've had. I've read
many of them, but this one I

126
00:09:18,440 --> 00:09:24,679
haven't read. And this is from
Thomas Jansen, and Thomas Janson says this

127
00:09:24,759 --> 00:09:26,399
is close to a talk I did
at NDC London, which makes me think

128
00:09:26,600 --> 00:09:30,240
we should probably have Thomas on the
show one of these days. Well,

129
00:09:30,519 --> 00:09:35,759
Polyglot Heaven and considering we have ted
around today like there, you know,

130
00:09:35,879 --> 00:09:39,320
there's a line he's used before too. Specifically in the talk he dugged into

131
00:09:39,919 --> 00:09:45,840
using multiple data stores in a given
application based on what it's appropriate, what's

132
00:09:45,840 --> 00:09:48,960
the shape of the data, what
you know, what's the sensitivity and so

133
00:09:48,000 --> 00:09:52,120
forth, And in his particular demo
for his talk he was using elastic Search

134
00:09:52,159 --> 00:09:56,320
and Neo for Jay. He goes
on to say, one of the things

135
00:09:56,360 --> 00:10:00,639
that Richard mentioned was to store objects
as they were received, but better approach

136
00:10:00,639 --> 00:10:03,559
is to store the events as a
result of the action the user was taking.

137
00:10:03,960 --> 00:10:07,440
I think this is a little bit
of semantics, but it's good semantics.

138
00:10:07,679 --> 00:10:09,960
By storing the event, you get
a complete audit logue of what has

139
00:10:09,960 --> 00:10:11,679
happened, but not necessarily the state
of the object, and this is a

140
00:10:11,679 --> 00:10:16,159
good thing. The reason is it's
a good thing is because the state could

141
00:10:16,159 --> 00:10:18,639
have many things in a system depending
on how you choose to read the events,

142
00:10:18,879 --> 00:10:24,480
but the fact that something has happened
can't change. Also, these events

143
00:10:24,519 --> 00:10:28,480
you store can trigger other parts of
the system, executing long running processes or

144
00:10:28,559 --> 00:10:33,399
processes that just update different read views
that could be stored in sequel and the

145
00:10:33,440 --> 00:10:37,919
over j mongol, last research or
whatever. And another thing that Carl was

146
00:10:37,919 --> 00:10:41,120
worried about this particular episode was eventual
consistency. And to be clear, every

147
00:10:41,159 --> 00:10:45,759
time something makes an action is almost
always doing it on data that could be

148
00:10:45,879 --> 00:10:48,480
old. The important part is if
you're using an event store and events sourcing,

149
00:10:50,919 --> 00:10:54,240
is that when you're executing the action, the action will be directed against

150
00:10:54,240 --> 00:10:56,639
the event store database, which is
consistent. The consistent part is that the

151
00:10:56,720 --> 00:11:00,679
user or some other system might have
triggered an action on old data. That

152
00:11:00,799 --> 00:11:03,759
is something that's really hard to work
yourself around. Really love the show,

153
00:11:03,799 --> 00:11:07,360
but also kind of a rare occurrence
if you do it right. Yeah,

154
00:11:07,399 --> 00:11:11,919
you know, And it makes sense
to optimize through the majority of cases and

155
00:11:11,960 --> 00:11:15,759
then deal with exceptions, and exceptions
occur, Right's I mean you think about

156
00:11:15,840 --> 00:11:18,240
every single website you ever go to
to look at air fares. Yeah,

157
00:11:18,320 --> 00:11:22,320
they're all lies. It's just that
only because most people never actually buy the

158
00:11:22,360 --> 00:11:24,440
airfas or what do you care that
it's a lie? And then when you

159
00:11:24,480 --> 00:11:28,080
actually go to buy it once in
a while, it's gonna go Hey remember

160
00:11:28,080 --> 00:11:30,320
that airfare we showed you? Yeah
we lied. Sorry, Yeah, here's

161
00:11:30,320 --> 00:11:33,159
the new air fair. Somebody was
faster than you. Yeah. It's just

162
00:11:33,240 --> 00:11:37,000
a cash failure, that's all it
is. But it's best compensated with a

163
00:11:37,039 --> 00:11:41,679
happy dialogue. Yeah yeah, hey
Thomas instead, yeah the one that costs

164
00:11:41,679 --> 00:11:46,360
more enough, Hey, Thomas,
thanks so much for your comment and a

165
00:11:46,399 --> 00:11:48,159
copy of music Code Buy. It's
on its way to you. And if

166
00:11:48,159 --> 00:11:50,559
you'd like a copy of music Code
by I read a comment on the website

167
00:11:50,600 --> 00:11:52,440
and dot net rocks dot com or
on the facebooks we published every show there,

168
00:11:52,600 --> 00:11:54,440
and you comment there and a reading
on the show, we'll send you

169
00:11:54,480 --> 00:11:58,840
a copy of music Code Buy,
and definitely follow us on Twitter if you

170
00:11:58,879 --> 00:12:03,039
want. But the cool kids they're
on Mastodon. I'm at Carl Franklin at

171
00:12:03,039 --> 00:12:07,879
tech hub dot social and I'm Rich
Campbell at Mastodon dot social And is it

172
00:12:07,919 --> 00:12:09,879
really the cool club? Because I
think Threads is the cool club. Now

173
00:12:11,320 --> 00:12:16,960
Threads sucks. I'm sorry, it's
you know, maybe it has the potential

174
00:12:16,120 --> 00:12:20,480
once it uses Federation and all that
stuff, which it doesn't yet, but

175
00:12:20,559 --> 00:12:26,720
the app itself is I hate it. Let me say this, one hundred

176
00:12:26,720 --> 00:12:31,080
million people disagree with you. Yeah, that's because their sheets. It's a

177
00:12:31,519 --> 00:12:37,159
very big number. That is like
a quarter or maybe even a third of

178
00:12:37,200 --> 00:12:41,279
all of Twitter in a week.
Yeah, that's true. Network effect is

179
00:12:41,320 --> 00:12:45,039
important, friend. Well it's because
everybody on Instagram said, okay, I'll

180
00:12:45,080 --> 00:12:48,200
try that. Yeah. Well this
is the brilliant I mean, listen,

181
00:12:48,360 --> 00:12:50,639
Zuckerberg screwed a lot of stuff up
for quite a while. This is a

182
00:12:50,679 --> 00:12:54,039
pretty slick move. Yeah. So
now he just has to fix the app

183
00:12:54,120 --> 00:12:58,720
so that it actually has functionality.
Wow, he's got the network effect.

184
00:12:58,759 --> 00:13:01,440
Maybe he can. Actually he's already
spend billions on an app that doesn't work.

185
00:13:01,440 --> 00:13:03,519
Maybe you can spend MP some money
on an app that does work.

186
00:13:03,559 --> 00:13:05,559
That's right, Hey, Zuck,
call me, I'll fix it for you.

187
00:13:05,679 --> 00:13:09,279
It'll be fine. Everything's fine.
Yeah, everything's fine. We're all

188
00:13:09,320 --> 00:13:15,320
fine here, how are you.
Let's get to work. Yeah, all

189
00:13:15,399 --> 00:13:18,799
right, let's introduce Ted Ted Neward. How long has it been since you

190
00:13:18,840 --> 00:13:28,039
were on this show? It's a
long time safe fifteen, twenty fifteen,

191
00:13:28,080 --> 00:13:30,480
all right, I'm wrong. I
think it's going to be even longer than

192
00:13:30,559 --> 00:13:33,840
that. Twenty fourteen. He was
on the panel that we did at the

193
00:13:33,960 --> 00:13:37,440
end Service Bus conference. Remember that. Oh yeah, boondoggle in Brooklyn.

194
00:13:37,480 --> 00:13:39,960
Boy, that was a riot.
That was fun. All that panel.

195
00:13:41,080 --> 00:13:45,879
The last full show on his own
twenty twelve, ten years ago. Oh

196
00:13:45,919 --> 00:13:50,120
my god. So your bio has
changed. It's a lot more general.

197
00:13:50,240 --> 00:13:52,679
But you've done so much work.
I'm just going to read what's on your

198
00:13:52,840 --> 00:13:58,679
on your site here. Ted Neward
is an industry professional with twenty plus years

199
00:13:58,759 --> 00:14:03,159
I put in the plus there experience. He speaks at conferences all over the

200
00:14:03,159 --> 00:14:07,200
world and writes regularly for a variety
of publications across the Java, dot net

201
00:14:07,200 --> 00:14:11,440
and other ecosystems. He currently resides
in Pacific Northwest with his wife, two

202
00:14:11,440 --> 00:14:15,600
sons, three cats, twelve laptop, seven tablets, nine phones, and

203
00:14:15,639 --> 00:14:20,559
a rather large utility bill. I
like that one. That's a great one.

204
00:14:20,799 --> 00:14:26,799
I actually actually, since we were
speaking of domestic situations. I need

205
00:14:26,840 --> 00:14:31,600
to revise that because one son has
moved out there. You go, Yeah,

206
00:14:31,759 --> 00:14:35,440
so it's now it's just one son, three cats and all the rest

207
00:14:35,440 --> 00:14:41,480
of the paraphernalia. Well, I
remember meeting you somewhere. You were a

208
00:14:41,519 --> 00:14:46,679
teacher, a trainer, developmentor and
a consultant there and when dot net first

209
00:14:46,919 --> 00:14:52,679
started, you were intrigued because you
were a Java guy. And then C

210
00:14:52,879 --> 00:14:56,679
Sharp turns out was pretty damn good. Well, so the interesting story there

211
00:14:56,840 --> 00:15:03,200
is, you know, I was
development or teaching Java when you know,

212
00:15:03,240 --> 00:15:05,679
Microsoft, all the dot net stuff
was still very very hush hush. Nobody

213
00:15:05,759 --> 00:15:09,720
knew anything about it. But Don
knew about it, and so did don

214
00:15:09,799 --> 00:15:13,399
knew about it? Don Box and
Don Box and Cross Cells probably I think

215
00:15:13,519 --> 00:15:18,720
only Don to start because they kept
the you know, the circle of trust

216
00:15:18,879 --> 00:15:24,120
very very tight back in those days. And Don was part of the Soapspec

217
00:15:24,200 --> 00:15:28,320
guys, he and Dave Weiner.
They contributed to the soap specs, so

218
00:15:28,360 --> 00:15:33,039
they were naturally pulled into the process. Yeah, and so we were down

219
00:15:33,320 --> 00:15:37,639
in LA for a instructor retreat and
Don pulled a bunch of us, you

220
00:15:37,679 --> 00:15:41,320
know, basically put a piece of
paper in front of us and said sign

221
00:15:41,399 --> 00:15:45,159
this or you need to leave the
room. And it was an extension of

222
00:15:45,200 --> 00:15:50,200
the NBA to allow Don to tell
us about this forthcoming dot Net thing,

223
00:15:50,639 --> 00:15:54,879
which back then was still they hadn't
quite figured out the names, so it

224
00:15:54,960 --> 00:16:00,679
was like next generation services. Yeah, well the first version was window services.

225
00:16:00,000 --> 00:16:04,399
They you know, consent decree web
services. Yeah, oh, they

226
00:16:04,399 --> 00:16:08,200
went through. That was actually one
of the t shirts that we had at

227
00:16:08,279 --> 00:16:11,960
one point was all of the different
names Calm three com plus all of them

228
00:16:12,159 --> 00:16:19,120
xed out, mgws UT, Universal
Runtime xed out. Yeah, And so

229
00:16:19,320 --> 00:16:22,840
it's you know, it's part of
the reality that dot Net was on an

230
00:16:22,840 --> 00:16:27,559
intentional product, like the Universal runtime
was addressing a Windows problem and had nothing

231
00:16:27,600 --> 00:16:33,440
to do with needing an alternative to
Java and had nothing to do with wow,

232
00:16:33,519 --> 00:16:37,519
our web tech sucks. Like the
fact that they all came together is

233
00:16:37,600 --> 00:16:42,360
kind of miraculous, although there's very
much a Conway's Law effect of that's why

234
00:16:42,360 --> 00:16:45,399
there were too many teams involved in
a lot of the architectural decisions are a

235
00:16:45,440 --> 00:16:48,200
bit odd because they had to do
with the team with the idea had to

236
00:16:48,240 --> 00:16:52,240
be the team implement and even though
it was in the wrong place, so

237
00:16:52,440 --> 00:16:56,480
many. Anyway, that was here
introduction that dot net and uh we we

238
00:16:56,519 --> 00:17:00,240
interviewed you early early on in dot
net Rocks. Oh yeah, Mark,

239
00:17:00,320 --> 00:17:07,319
don Yeah, I think I've actually
done a dotnet Rocks with all of your

240
00:17:07,319 --> 00:17:10,119
co hosts. I did one with
Mark, I did one with Rory,

241
00:17:10,559 --> 00:17:14,079
uh and Richard. I've done several
with Richard. That's just pretty special.

242
00:17:14,400 --> 00:17:18,160
Yeah, I'm kind of surprised you've
done several of me. Uh. Well,

243
00:17:18,200 --> 00:17:22,039
I just like you, Richard.
I don't know if that's true either.

244
00:17:22,160 --> 00:17:25,319
Man. There are very few people, very very few people in the

245
00:17:25,359 --> 00:17:29,119
world that I invited to my fortieth
birthday party, and only one that I

246
00:17:29,160 --> 00:17:33,759
asked mc the roast. There's that. Yeah, that's mostly because I don't

247
00:17:33,759 --> 00:17:36,480
think that's almost kind of a punishment. Actually, although I didn't spend time

248
00:17:36,480 --> 00:17:41,279
with your sister, and your sister
is awesome. Well, but here's the

249
00:17:41,359 --> 00:17:42,640
thing that I know about you,
Ted, and then that we can you

250
00:17:42,640 --> 00:17:47,359
know, your bio doesn't really explain
it. You are like the polyglot.

251
00:17:47,599 --> 00:17:52,599
You all of these languages on top
of the JVM. You know a lot

252
00:17:52,640 --> 00:17:56,720
of languages on top of dot net, some that aren't even on dot net.

253
00:17:56,839 --> 00:17:59,720
You know a lot of different languages, a lot of different technologies.

254
00:18:00,400 --> 00:18:06,480
You were sort of you were the
anti o RM guy back when you and

255
00:18:06,680 --> 00:18:14,759
or and Eeny had that slap smacked
down show Canada. Yeah, of course,

256
00:18:14,799 --> 00:18:17,440
but I mean you were the guy
who's like, start procedure, start

257
00:18:17,440 --> 00:18:21,559
procedures, and Aran's like no,
and then you know, that debate raged

258
00:18:21,599 --> 00:18:26,279
on for a while and now you're
you're You're back here to talk about couch

259
00:18:26,319 --> 00:18:30,519
base. Well, so part of
the thing is I've always looked at technologies

260
00:18:30,599 --> 00:18:34,240
and particularly new stuff that's coming down
the pipe. But more importantly, I

261
00:18:34,279 --> 00:18:40,440
think it's the way to describe me. The polite way is to say philosopher,

262
00:18:40,880 --> 00:18:45,200
the more accurate ways to say contrarian. So back during you know,

263
00:18:45,279 --> 00:18:51,200
the two thousands, particularly in the
Java space, everybody was going hog wild

264
00:18:51,240 --> 00:18:56,079
over enterprise Java beans and object relational
mapping tools, and I was trying to

265
00:18:56,119 --> 00:19:00,039
point out that there are significant costs
to using these things and to say don't

266
00:19:00,119 --> 00:19:04,400
don't just take it by default.
And so yeah, that's when I penned

267
00:19:04,519 --> 00:19:10,119
the you know, object relitional mapping
is the Vietnam of computer science, for

268
00:19:10,359 --> 00:19:14,400
which for which I am, that
is still the thing I am most widely

269
00:19:14,519 --> 00:19:18,559
known that that actually earned me an
entry in Wikipedia. But that was a

270
00:19:18,640 --> 00:19:22,440
point in time, like you're pointing
out, right, things change and things

271
00:19:22,480 --> 00:19:29,720
evolve in some things that weren't working
is so well back then got fixed and

272
00:19:30,559 --> 00:19:33,799
you know, new technologies came out
around it. Well, part of the

273
00:19:33,799 --> 00:19:37,440
thing is we have to be a
little bit careful because yes, we made

274
00:19:37,519 --> 00:19:41,240
changes, but there are also certain
properties of the universe that are immutable,

275
00:19:41,359 --> 00:19:47,039
such as the speed of light.
Right. The fallacies of distributed computing are

276
00:19:47,160 --> 00:19:49,400
always going to be there because as
soon as you try to go from one

277
00:19:49,440 --> 00:19:55,240
machine to another, it gets very
very expensive in time and energy and bandwidth

278
00:19:55,240 --> 00:19:59,519
and so forth, compared to within
the machine. I mean exactly, exactly.

279
00:20:00,200 --> 00:20:03,559
Often we're only slicy seconds here,
but you're going from nanoseconds to milliseconds

280
00:20:03,799 --> 00:20:07,920
in a lot of cases, and
as soon as you change orders of magnitude

281
00:20:07,960 --> 00:20:11,480
like that, you know, And
and the big concern was that a lot

282
00:20:11,559 --> 00:20:14,720
of the rms at the time,
you know, lazy loading was the word

283
00:20:14,720 --> 00:20:17,240
of the day, and so it'd
be like, oh, well, let's

284
00:20:17,240 --> 00:20:19,759
go fetch one property at a time. So you're making all these trips back

285
00:20:19,759 --> 00:20:23,880
and forth between these two nodes and
the network and suddenly wondering why your system

286
00:20:23,920 --> 00:20:27,359
is slow. This holds, by
the way, whether we're talking about you

287
00:20:27,400 --> 00:20:32,799
know, databases, whether we're talking
about web services, whether we're talking about

288
00:20:33,359 --> 00:20:37,000
you know, grid computing. If
you remember that phrase from way back when

289
00:20:37,559 --> 00:20:42,039
you know cloud it, as long
as they are just bo stuff bingo,

290
00:20:42,319 --> 00:20:48,160
right, these these things still hold. And so you know, part of

291
00:20:48,440 --> 00:20:51,440
part of what I've always tried to
do is to look at things and say,

292
00:20:51,480 --> 00:20:53,000
all right, you know, the
yes, there is a mainstream view

293
00:20:53,000 --> 00:20:56,519
of things, but how do we
you know, let's get out of the

294
00:20:56,519 --> 00:21:00,359
mainstream for a second, because it
turns out the eight twenty rule still holds.

295
00:21:00,440 --> 00:21:04,160
Eighty percent of what anybody does can
probably fit in the mainstream. But

296
00:21:04,200 --> 00:21:10,559
then there's the twenty percent around the
outside edges that don't fit. And so

297
00:21:10,640 --> 00:21:14,720
this is where you know, particularly
as I started looking into databases, of

298
00:21:14,720 --> 00:21:17,440
course, I was looking at all
the Nosequel at the time, right,

299
00:21:17,640 --> 00:21:22,359
and there are tremendously useful things about
a Nosequel database. You know, you

300
00:21:22,400 --> 00:21:26,119
look at mongo dB for a second, the documents shape of things. Before

301
00:21:26,119 --> 00:21:30,480
we get into that, I want
I want to go back a point where

302
00:21:30,480 --> 00:21:33,559
you were talking about how certain you
know, constants like the speed of light

303
00:21:34,240 --> 00:21:41,279
and being chatty and all that,
And I think that I a sink innumerable

304
00:21:42,640 --> 00:21:49,079
changed a lot of things, don't
you When we could do streaming either locally

305
00:21:49,440 --> 00:21:55,240
or over the internet, that did. I mean, you know, it's

306
00:21:55,240 --> 00:22:00,160
sort of a nice answer to lazy
loading when you're talking about data that it's

307
00:22:00,640 --> 00:22:04,319
it changes things. I'm not necessarily
going to go so far as to say

308
00:22:04,359 --> 00:22:10,839
it, you know, it solved
all problems, but it's certainly you know,

309
00:22:10,960 --> 00:22:15,519
it changes where things occur and how
things occur. Right, Yeah,

310
00:22:15,559 --> 00:22:18,839
you know, a lot of this
is borne out of the whole reactive programming

311
00:22:18,960 --> 00:22:26,079
space and reactive you know, and
many responses says we're still going to pay

312
00:22:26,119 --> 00:22:30,839
the cost of time in terms of
data moving over the network, but we're

313
00:22:30,880 --> 00:22:34,480
going to pay it differently. Your
users aren't going to notice it. Let's

314
00:22:34,480 --> 00:22:40,960
put it in a perfect world ideally, right, But I mean, you

315
00:22:41,000 --> 00:22:45,319
know, if an interesting experiment that
I often do, because one of the

316
00:22:45,359 --> 00:22:49,000
things I've done since we last talk
is is I actually am a guest lecturer

317
00:22:49,000 --> 00:22:52,920
at the University of Washington, so
I'm actually talking to undergrads on a regular

318
00:22:52,960 --> 00:22:57,599
basis, and spring quarter I was
teaching distributed systems, and so one of

319
00:22:57,640 --> 00:23:02,119
the things I was pointing out is, you know, yes, there's the

320
00:23:02,160 --> 00:23:04,839
cost of sending all this stuff across
the network. But let's do an interesting

321
00:23:04,880 --> 00:23:11,319
experiment. Bring up the Amazon dot
Com homepage. But don't look at the

322
00:23:11,319 --> 00:23:14,920
actual center of the browser. Look
at the bottom, look at the status

323
00:23:14,920 --> 00:23:19,880
bar right because it flickers as it
loads various images and so forth. And

324
00:23:19,960 --> 00:23:26,680
let's count how long it takes to
actually fully load the Amazon dot Com home

325
00:23:26,759 --> 00:23:30,400
page. And it's measured in seconds, and it's not single digit seconds.

326
00:23:30,720 --> 00:23:36,359
But what they do is they load
the first you know, first page,

327
00:23:36,400 --> 00:23:40,319
if you will. They load the
first that you can see very quickly,

328
00:23:40,599 --> 00:23:42,880
yes, and then they go fill
in all this other stuff and a synchronous

329
00:23:42,920 --> 00:23:48,079
link right by the time you scroll
down, bingo, you'll see it.

330
00:23:48,119 --> 00:23:51,799
And it would you would think that
it's been there all along, when in

331
00:23:51,839 --> 00:23:56,960
fact it just got there right right. And in many respects, it's a

332
00:23:57,119 --> 00:24:03,880
brilliant use of asynchronous you know loading. To say, most people aren't ever

333
00:24:03,920 --> 00:24:07,920
going to go below the fold anyway, So let's load all that stuff after

334
00:24:07,960 --> 00:24:11,480
the fact. But let's make sure
that that above the fold. The first

335
00:24:11,680 --> 00:24:17,880
I don't know, eight hundred thousand
something pixels that loads immediately, right,

336
00:24:17,920 --> 00:24:22,000
that that loads as fast as we
can possibly get it. And and there

337
00:24:22,039 --> 00:24:25,279
are so many ways that you can
approach the design of a system, the

338
00:24:25,359 --> 00:24:30,799
design of a page, of your
user interaction, whatever you want to call

339
00:24:30,839 --> 00:24:33,720
it to, you know, to
reflect that. Right, that is clearly

340
00:24:33,799 --> 00:24:38,799
somebody who sat down and looked very
very much, not just at the numbers

341
00:24:38,799 --> 00:24:42,279
in the system, but the way
people were interacting with the system. All

342
00:24:42,359 --> 00:24:48,119
right, could talk next next Now
you were talking. You started talking about

343
00:24:48,519 --> 00:24:52,519
manguid B and and all that stuff, and I interrupted you. I apologize.

344
00:24:53,240 --> 00:24:56,920
I mean, the big thing was, you know, when no sequel

345
00:24:56,960 --> 00:25:02,960
came around, Right, Originally the
was to release us from some of the

346
00:25:03,000 --> 00:25:04,880
things we were doing with respect to
transactions and to be able to get to

347
00:25:04,920 --> 00:25:10,400
some of that eventual consistency that you
were talking about earlier. But along the

348
00:25:10,440 --> 00:25:12,200
way, you know, when somebody
said, okay, we're going to break

349
00:25:12,200 --> 00:25:18,000
away from the relational database. Here's
an opportunity. Let's really break away from

350
00:25:18,039 --> 00:25:21,480
the relational database. And so they
started changing up the data. You know,

351
00:25:21,480 --> 00:25:23,319
the data shapes, the data models, right. So now instead of

352
00:25:23,359 --> 00:25:29,039
it always being relations and relevars,
let's look at documents, let's look at

353
00:25:29,079 --> 00:25:33,240
graph let's look at and what I'm
seeing now personally looking at some of these

354
00:25:33,359 --> 00:25:37,920
different databases, and this is kind
of where I got into conversations with couch

355
00:25:37,960 --> 00:25:41,960
Base, and I'm working with them
to kind of, you know, introduce

356
00:25:41,039 --> 00:25:45,359
them into more of the university setting
as part of my stuff at Utah.

357
00:25:47,200 --> 00:25:52,000
You know, different databases are now
actually allowing us to do a certain amount

358
00:25:52,079 --> 00:25:59,279
of combination of various things. I
mean, before it was you got relations

359
00:25:59,279 --> 00:26:03,440
in relev you had transactional, and
you didn't even see the storage engine.

360
00:26:03,519 --> 00:26:07,160
That was just you know, a
baked in, opaque property of the database.

361
00:26:07,240 --> 00:26:12,839
Today we are seeing databases being able
to plug some of the storage engine,

362
00:26:14,039 --> 00:26:17,359
you know, so like my sequel
will let you choose which storage engine

363
00:26:17,480 --> 00:26:21,160
use, We can decide whether we
want to run a cloud or on prem

364
00:26:21,319 --> 00:26:25,079
We can, you know, we
can make all of these interesting decisions either

365
00:26:25,160 --> 00:26:29,279
between products or within products. But
more and more of them are starting to

366
00:26:29,319 --> 00:26:32,359
go the whole multimodel route, right, which is one of the reasons why

367
00:26:32,400 --> 00:26:36,960
couch is interesting because early no sequel
said, yeah, Okay, we'll give

368
00:26:37,000 --> 00:26:38,799
you a document model, but you're
going to have to write a lot of

369
00:26:38,839 --> 00:26:41,680
code to query it, right,
you got to do this query by example

370
00:26:41,759 --> 00:26:47,480
stuff. And you know, couch
was one of the couch Base. I

371
00:26:47,519 --> 00:26:49,799
have to be careful because there's couch
base and there's couch dB and they are

372
00:26:49,960 --> 00:26:53,000
very very different things. Ok.
The couch base guy said, no,

373
00:26:53,000 --> 00:26:56,200
no, no, we can we
can give you your sequel or a sequel

374
00:26:56,240 --> 00:27:00,000
like dialect. We can give that
to you, Nickel, and yeah,

375
00:27:00,000 --> 00:27:03,680
exactly, and I can go,
yeah, go go get it, go

376
00:27:03,680 --> 00:27:11,160
go queery to your heart's content.
And you know that in many ways addresses

377
00:27:11,200 --> 00:27:14,920
some of the concerns people have.
You know, couch based supports, you

378
00:27:14,960 --> 00:27:18,279
know, some of the traditional relational
view of things as well as you know,

379
00:27:18,319 --> 00:27:21,759
they've got some degree of graph I
don't know that I would go so

380
00:27:21,799 --> 00:27:25,920
far as to call it a full
graph database. There's also a link to

381
00:27:26,119 --> 00:27:30,079
couch base tool out there, so
you could use your good old familiar link

382
00:27:30,160 --> 00:27:36,319
syntax, which is very sequel like
and very functional. Yeah, yeah,

383
00:27:36,359 --> 00:27:41,640
you know, so this I mean
to me, this is interesting simply because

384
00:27:41,880 --> 00:27:47,440
it means that it opens up a
whole lot more in the way of opportunities

385
00:27:47,480 --> 00:27:49,759
to choose things. You know,
twenty five years ago, if we were

386
00:27:49,759 --> 00:27:55,599
talking, the only choice you had
with respect to where you were going to

387
00:27:55,640 --> 00:27:59,319
store your data is which relational database
were you going to use? Right?

388
00:27:59,440 --> 00:28:02,599
Was it Sequel server? Was it
Oracle? Or maybe if you were really

389
00:28:02,640 --> 00:28:06,039
heretical, you chose one of the
open source ones, right, my Sequel

390
00:28:06,079 --> 00:28:10,839
or postgress right today? Oh you
didn't even say dB two. I didn't

391
00:28:10,839 --> 00:28:15,759
know what's wrong with that dBase?
Oh well, you know, IBM.

392
00:28:15,039 --> 00:28:18,920
IBM just decided. IBM just decided
that they were going to charge for red

393
00:28:18,960 --> 00:28:22,440
Hat Enterprise Linux. So now they
are dead to me that that's that's what's

394
00:28:22,440 --> 00:28:29,720
going on there. Um, you
know, I mean the the options available,

395
00:28:29,759 --> 00:28:33,000
And frankly, that's very intimidating to
a lot of people, right.

396
00:28:33,160 --> 00:28:38,680
There are significant number of developers and
architects out there who find that choice intimidating

397
00:28:38,720 --> 00:28:42,079
because it's like, what if I
choose the wrong one? Yeah, because

398
00:28:42,079 --> 00:28:47,000
we all know how changing the database
sucks. Like that's a brute that's a

399
00:28:47,039 --> 00:28:49,279
brutal prospect. I don't know how
often they get to even choose. We're

400
00:28:49,319 --> 00:28:52,559
paying for sequel server licenses. You
will store your data and sequel service.

401
00:28:52,599 --> 00:28:56,359
There is that too, Yeah,
yeah, there is that. Although the

402
00:28:56,440 --> 00:29:00,960
joys of microservices right now persistent.
This is all you know, an internal

403
00:29:02,200 --> 00:29:06,279
detail, right it's encapsulated away because
it's all part of my microservice. So

404
00:29:07,359 --> 00:29:11,160
you know, yeah, well that's
for those that are doing microservices. There's

405
00:29:11,200 --> 00:29:12,559
a lot of us out there that
aren't. Well. And I would also

406
00:29:12,680 --> 00:29:17,119
argue it's one of the reasons that
the open source database took off because the

407
00:29:17,200 --> 00:29:22,839
license hammer is defeated by but it's
free, right right right, I can't

408
00:29:22,920 --> 00:29:29,640
argue with that. Yeah, So, you know, I mean the in

409
00:29:29,680 --> 00:29:33,839
the case of couch base, you
know, I like some of the decisions

410
00:29:33,880 --> 00:29:37,119
they've made. Um, you know, I like some of the people that

411
00:29:37,160 --> 00:29:41,000
I've talked to. There are a
lot of other, you know, viable

412
00:29:41,079 --> 00:29:45,640
tools to use. And as a
matter of fact, one of the things

413
00:29:45,079 --> 00:29:49,000
spring Quarter I was also teaching a
data and databases course to the kids that

414
00:29:49,039 --> 00:29:57,279
you do and teaching them relational databases. I use Sequelight because well it's free

415
00:29:57,319 --> 00:30:02,799
and frankly it's low realized, and
so suddenly it opens up a whole lot

416
00:30:02,799 --> 00:30:07,119
of opportunities to avoid making those round
trips and I saw a great Lettle meme

417
00:30:07,200 --> 00:30:12,000
that said every time somebody says this
meeting could have been an email, there

418
00:30:12,039 --> 00:30:17,799
is somebody else saying this database could
have been a Sequal Light. Yeah.

419
00:30:17,960 --> 00:30:22,119
Right, Well, you know,
if your database as one user, and

420
00:30:22,440 --> 00:30:26,880
you know where so many databases have
exactly one user, you're holding it in

421
00:30:26,960 --> 00:30:30,880
your hand, voice the phone,
the phone. Yeah, well you're holding

422
00:30:30,880 --> 00:30:33,920
it. You're well I was holding
it, yes, but you know,

423
00:30:34,880 --> 00:30:38,640
I'll pick mine up two just to
be here you go. I'm just running

424
00:30:38,720 --> 00:30:42,359
down the sort of the features of
couch Base. Obviously, it's a document

425
00:30:42,480 --> 00:30:48,920
oriented distributed so there's a distributed architecture, so it can scale horizontally, right,

426
00:30:49,160 --> 00:30:53,720
And depending on where you're running it
in on what hardware or if it's

427
00:30:53,720 --> 00:31:00,599
a cloud thing, all the cloud
providers have services for it in memory optimization.

428
00:31:00,920 --> 00:31:03,640
Right. So if you could think
of it like, oh, load

429
00:31:03,640 --> 00:31:10,599
of Jason file into a dictionary,
there's your database, right, And then

430
00:31:10,640 --> 00:31:15,359
there's this Nickel NYQL query language which
is kind of like Sequel but designed for

431
00:31:15,799 --> 00:31:23,200
Jason data synchronization. Couch Base Mobile, so a mobile database like you were

432
00:31:23,200 --> 00:31:26,920
talking about Sequel, you know,
Sequel Light, but this is a couch

433
00:31:26,960 --> 00:31:32,559
based light and a synchronization gateway so
that you can do that. And then

434
00:31:32,640 --> 00:31:36,839
of course it's got integrations and SDKs
and all sorts of stuff. And I

435
00:31:36,880 --> 00:31:40,599
also mentioned before this link to couch
base, which is good for dot net

436
00:31:40,640 --> 00:31:45,519
developers if you're used to link,
right, So yeah, it's it's pretty

437
00:31:45,519 --> 00:31:49,920
cool. The other thing I know
that that the couch based folks are talking

438
00:31:49,920 --> 00:31:56,759
a great deal about, and you
know offering is Capella, which is there

439
00:31:56,960 --> 00:32:00,039
cloud hosted flavor of I mean,
you can certainly a couch base to run

440
00:32:00,039 --> 00:32:06,440
in your favorite abs ash or whatever, but you know what is the practical

441
00:32:06,480 --> 00:32:10,160
difference between you figuring out which version
to install and just letting couch base deal

442
00:32:10,160 --> 00:32:15,160
with it in their cloud, right
well, and just add option to just

443
00:32:15,279 --> 00:32:17,000
go, hey, I don't have
to decide now we're just running this in

444
00:32:17,079 --> 00:32:21,559
the local rig while we're figuring stuff
out. But when it comes to scaling,

445
00:32:21,559 --> 00:32:22,920
it's like, do I really want
to build it this infrastructure? Can

446
00:32:22,960 --> 00:32:27,359
I just shift to the services model? And it's a database as a service.

447
00:32:27,720 --> 00:32:30,880
Pretty awesome and gentlemen, and I'm
gonna use that term very loosening to

448
00:32:31,000 --> 00:32:36,200
day. I need to interrupt from
one moment for this very important message,

449
00:32:39,319 --> 00:32:42,960
and we're back. It's dotting that
Rocks. I'm Richard Campbell. Let's call

450
00:32:43,039 --> 00:32:49,039
Frankly and our old friend Ted Neward, who only careful with that old careful

451
00:32:49,079 --> 00:32:52,559
with that old emphasis on the word
old. Boon at first show was fifty

452
00:32:52,640 --> 00:32:57,519
nine, which I think is actually
rary at that point, but you know,

453
00:32:57,559 --> 00:33:02,000
he's pretty close in that ballpark,
and we're talking a little bit about

454
00:33:02,480 --> 00:33:07,039
the modern data landscape. I think
more than anything, just that you know,

455
00:33:07,319 --> 00:33:12,400
different ways to store. I really
like this multi model mindset, just

456
00:33:12,599 --> 00:33:15,400
that what engine would you like to
use? What form would you like the

457
00:33:15,400 --> 00:33:19,279
store? I mean even sequel servers
headed down this path. He yeah,

458
00:33:19,720 --> 00:33:22,839
oh you know like it. Now
that you say it, it's like,

459
00:33:22,880 --> 00:33:25,160
wow, that's really what's happening with
data stories these days. It's like,

460
00:33:25,200 --> 00:33:28,720
well, what do you got,
Let me hold it for you, let

461
00:33:28,720 --> 00:33:32,319
me index for you. And this
is where you know, some knowledge of

462
00:33:32,839 --> 00:33:38,160
database internals will help, right,
because one of the things that we saw

463
00:33:38,400 --> 00:33:43,640
you terms of well, let me
back up for a second because earlier you

464
00:33:43,720 --> 00:33:47,039
talked about the comment from Thomas and
I can't remember his last name, sorry,

465
00:33:47,200 --> 00:33:52,200
and he was talking about polygot persistence
and storing data in different databases.

466
00:33:52,240 --> 00:33:58,160
One of the drawbacks to that approach
is the fact that in many cases,

467
00:33:58,359 --> 00:34:02,240
trying to do so a TOM across
these different databases was tricky. And so

468
00:34:02,279 --> 00:34:06,880
if I were storing something in my
document that also needed to modify something in

469
00:34:06,920 --> 00:34:09,760
the graph, Okay, in one
case, I'm doing it to a couch

470
00:34:09,840 --> 00:34:13,639
dB, in the other case,
I'm doing it to a NEO for J

471
00:34:14,440 --> 00:34:16,800
and making sure that both of those
got updated or neither did was always a

472
00:34:16,800 --> 00:34:22,360
little problematic because you're going across databases, and we didn't in the early days

473
00:34:22,440 --> 00:34:29,719
really have distributed transactions across different no
sequel databases. When the database vendors started

474
00:34:29,760 --> 00:34:35,760
to embrace this multi model thing.
Now it became possible to do that atomically

475
00:34:35,760 --> 00:34:39,719
because it's all inside of one transaction
manager, the one database, and still

476
00:34:39,760 --> 00:34:44,960
have some of your multimodel. But
you have to be a little bit careful

477
00:34:45,119 --> 00:34:50,199
because how do they store things internally
is going to really affect some of the

478
00:34:50,239 --> 00:34:52,840
performance, right most right, Like, for example, there's no data or

479
00:34:52,920 --> 00:34:59,960
time types in couch base right right. Oops. I just think you quiet

480
00:35:00,159 --> 00:35:02,760
walk past the real estate, which
is life is too short for distributed transactions.

481
00:35:02,880 --> 00:35:07,199
Well there is that, there is
stuff. Once upon a time,

482
00:35:07,639 --> 00:35:13,719
you know, I crushed my soul
trying to make DTS work, truly try

483
00:35:13,840 --> 00:35:16,320
to make it work. Oh,
we all did. We all did because

484
00:35:16,440 --> 00:35:21,639
truthfully, you know, that was
that was what we all of us believed

485
00:35:21,639 --> 00:35:25,599
and taught everybody else. And what
was the I mean, the canonical example

486
00:35:25,840 --> 00:35:31,000
for transactions banking? Right, Yeah, I'm going to make a deposit to

487
00:35:31,039 --> 00:35:34,719
you. So we're going to take
out a lock and we're going to make

488
00:35:34,760 --> 00:35:37,199
sure that we remove the money from
my account and deposited to your account.

489
00:35:37,960 --> 00:35:44,440
And the great lie behind all of
that was that's not actually how banking works.

490
00:35:44,639 --> 00:35:49,159
It never has. It's you ever
been a thing exactly exactly. Oh

491
00:35:49,199 --> 00:35:52,440
and by the way of using JavaScript
for those floating point data types, you

492
00:35:52,519 --> 00:35:55,840
got another problem. Well there's gonna
be some funny look at penny shown up

493
00:35:55,880 --> 00:36:00,440
real time. Now there are those
problems that we inherit, and there are

494
00:36:00,480 --> 00:36:04,400
those problems we make for ourselves.
And let's let's if you're using floating point

495
00:36:04,480 --> 00:36:09,119
in any language, in any language, for money, we have a yeah,

496
00:36:09,239 --> 00:36:14,840
seriously experienced tip. Money is not
floating point. No tip for you

497
00:36:14,880 --> 00:36:19,559
all kids, right, don't count
dollars with fractions of a dollar. Count

498
00:36:19,559 --> 00:36:22,480
pennies. It's all pennies, right, One dollar is one hundred money units,

499
00:36:23,320 --> 00:36:28,400
you know. Yeah, I mean
going past the whole transactions thing,

500
00:36:28,440 --> 00:36:31,559
distributed transactions thing, right, especially
because when we needed to scale, contention

501
00:36:31,679 --> 00:36:35,239
is the enemy of scale, right, you know, just repeat that to

502
00:36:35,280 --> 00:36:40,199
yourself over and over and over again. And you know. The the multimodel

503
00:36:40,280 --> 00:36:45,920
databases allow us to you know,
work with all these different shapes of data,

504
00:36:46,000 --> 00:36:50,719
but deep down, you know,
obviously they have to store data somehow,

505
00:36:50,760 --> 00:36:52,800
and this is why a lot of
the early multi models were built on

506
00:36:52,840 --> 00:36:57,840
top of key value stores. Right
here is here's a primary key and the

507
00:36:57,880 --> 00:37:00,719
rest of it is a blob binary
and you can interpret that however you want.

508
00:37:01,280 --> 00:37:06,159
But every time you fetched that,
it had to be repounded into shape

509
00:37:06,199 --> 00:37:09,480
before it gave it back to you. Now, some of the databases seem

510
00:37:09,559 --> 00:37:15,599
to be experimenting with more in the
way of you know, like like actually

511
00:37:15,039 --> 00:37:20,800
storing it differently with indexes and weird
places. So it's not just one storage

512
00:37:20,800 --> 00:37:24,159
engine. They're actually using multiple storage
engines depending upon what you're storing underneath there.

513
00:37:24,480 --> 00:37:29,159
And then and a unified intacting strategy, right right, right, right,

514
00:37:29,239 --> 00:37:30,480
right, So it's just really just
a performance thing. Just Hey,

515
00:37:30,519 --> 00:37:32,679
let's take the shape of data and
store it in the closest thing to its

516
00:37:32,719 --> 00:37:37,039
natural shape. I think that that's
where you get the best performance generally speaking,

517
00:37:37,360 --> 00:37:43,280
right, because the customer doesn't care. They just expect us to store

518
00:37:43,280 --> 00:37:45,760
the data and be able to retrieve
it, and sooner would be better and

519
00:37:46,119 --> 00:37:50,480
right cheapest possible, please, thank
you very much. Yeah, cheap is

520
00:37:50,519 --> 00:37:52,679
also handy. Yeah, yeah,
well, and I think you know,

521
00:37:52,760 --> 00:37:57,239
all of this is still relative,
right, because so much of this,

522
00:37:57,480 --> 00:38:00,559
you know, so much of the
performance of your queer could be drowned out

523
00:38:00,599 --> 00:38:04,960
by the length of time it takes
that web request to arrive at the page

524
00:38:05,039 --> 00:38:07,679
and then get back to the browser. So again, go back to what

525
00:38:07,679 --> 00:38:12,559
we talked about earlier, the Amazon
story. Right, In many cases,

526
00:38:13,159 --> 00:38:15,840
let me just fetch an initial set
of data, get it back to you,

527
00:38:15,880 --> 00:38:19,159
and then we can go get more
later if you need it, right,

528
00:38:19,280 --> 00:38:22,039
yeah, and do so asynchronously in
that sort of reactive model that Carl

529
00:38:22,079 --> 00:38:28,480
talked about. But part of you
know, part of what any system designer,

530
00:38:28,559 --> 00:38:30,800
part of what any architect needs to
do is figure out where we need

531
00:38:30,840 --> 00:38:36,039
to be really responsive and where we
can do that asynchronous loading, and in

532
00:38:36,079 --> 00:38:39,719
many cases with databases, we can
do some of that by saying, let

533
00:38:39,719 --> 00:38:43,719
me query what I'm looking for,
but then let me also pull back some

534
00:38:43,800 --> 00:38:47,199
additional data, but pull that back
asynchronously or what have you. And this

535
00:38:47,239 --> 00:38:52,639
applies not just a databases obviously,
web services and Jason services and blah blah

536
00:38:52,679 --> 00:38:55,559
blah blah blah blah blah blah blah. You know, do we still love

537
00:38:55,639 --> 00:39:00,199
Jason in twenty twenty three. It's
just a data form. I mean I

538
00:39:00,239 --> 00:39:04,360
never fell out of love with XML. I never fell out of love with

539
00:39:04,440 --> 00:39:10,320
CSV. I love hard with We
have issues, man, you're just a

540
00:39:10,559 --> 00:39:14,559
You're just a love them and leave
them kind of to me. Yeah,

541
00:39:14,719 --> 00:39:17,719
you know, but Jason I never
had a problem ever. Okay, No,

542
00:39:17,840 --> 00:39:22,880
I have had problems with Jason.
I have had problems where by default

543
00:39:22,280 --> 00:39:30,440
a serializer a de serializer changes the
case of properties to to camel case when

544
00:39:30,519 --> 00:39:35,639
that's not the case, that's not
what they are, and therefore it fails.

545
00:39:36,119 --> 00:39:38,920
Yeah, I have a problem with
that. Well, see, here's

546
00:39:39,000 --> 00:39:44,000
here's the fun thing, right,
because XML could actually account for that,

547
00:39:44,079 --> 00:39:47,280
for you because XML has something that
Jason doesn't, which is the opportunity to

548
00:39:47,360 --> 00:39:52,840
capture metadata directly in the format.
Right, And I find it absolutely telling

549
00:39:52,880 --> 00:39:57,800
that you know what people are working
on right now, Schema for Jason.

550
00:39:58,280 --> 00:40:04,079
Oh god, no, wait,
well it stop stop. How many times

551
00:40:04,079 --> 00:40:06,440
have we seen this? This is
the path to hell? You know,

552
00:40:06,440 --> 00:40:07,960
it would be even more fun.
How about schema for XML? Could we

553
00:40:08,000 --> 00:40:12,559
do that? That would be really
fun. Let's do that, hey man,

554
00:40:13,039 --> 00:40:15,079
Schema for XML. You know,
it was, it was, it

555
00:40:15,159 --> 00:40:20,079
was incredibly I'm not saying schema for
x MEL didn't buy me a car because

556
00:40:20,079 --> 00:40:22,760
it right, right, But it
doesn't mean it was ever a good idea.

557
00:40:23,079 --> 00:40:28,280
Right. It's self defining. But
here's the thing. Here's the thing,

558
00:40:28,400 --> 00:40:34,119
right is, first of all,
the idea of schema itself is not

559
00:40:34,239 --> 00:40:37,079
bad because it allows machines to be
able to do a bunch of the work

560
00:40:37,239 --> 00:40:39,920
we would normally have to be verifying. Yeah, right, exactly validation.

561
00:40:40,599 --> 00:40:47,679
And where the XML Community committee I
think got XML schema wrong as they tried

562
00:40:47,679 --> 00:40:52,400
to write XML schema in XML.
To be fair, it's because they wanted

563
00:40:52,400 --> 00:40:55,840
to do everything in XML all the
time. We just kind of started you

564
00:40:55,880 --> 00:41:00,039
know, believing our own stuff.
Now I need a scheme for my schema.

565
00:41:00,159 --> 00:41:04,679
Well, and you know who else
did that is the Sequel Committee,

566
00:41:04,760 --> 00:41:07,719
right, because they want, you
know, they want schema to find within

567
00:41:07,760 --> 00:41:10,719
the sequel language itself. So they
just created a whole bunch of new keywords

568
00:41:10,719 --> 00:41:15,119
and so forth to do it.
You know. So this notion of trying

569
00:41:15,119 --> 00:41:21,519
to get kind of this linguistic closure
that we can define the language inside the

570
00:41:21,599 --> 00:41:24,559
language. It's I see what you
did there with that language reference there,

571
00:41:24,679 --> 00:41:29,280
I saw that. I got you. I'm onto you man. You know,

572
00:41:30,960 --> 00:41:34,800
it's an interesting idea, and I
don't know, you know, I

573
00:41:34,920 --> 00:41:38,360
know a lot of language designers find
it to be really interesting and elegant.

574
00:41:39,000 --> 00:41:44,440
I don't know how much. I
don't know how how much that elegance actually

575
00:41:44,480 --> 00:41:46,920
pays off in the long run.
Yeah, you know, but at the

576
00:41:47,000 --> 00:41:50,760
end of the day, they still
go after it. And you know,

577
00:41:51,360 --> 00:41:54,400
Jason ld I think it is is
the schema for Jason. I think they're

578
00:41:54,400 --> 00:41:59,159
trying to do it in Jason at
the same time. And it's like,

579
00:41:59,239 --> 00:42:05,280
you know, maybe it's not bad
to just have a different definition, but

580
00:42:05,360 --> 00:42:09,719
please, please, please please please
don't don't throw yammo at this particular problem

581
00:42:09,760 --> 00:42:13,719
because that's just this. Oh God, I was waiting for you to bring

582
00:42:13,800 --> 00:42:21,480
up that awesome, awesome language.
I cannot stand. M loves you.

583
00:42:21,960 --> 00:42:25,159
But these are all just representations of
data, right, And you know,

584
00:42:25,559 --> 00:42:30,159
I really want us to stop,
like, you know, reinventing new data

585
00:42:30,199 --> 00:42:35,320
formats to do the same thing and
then arguing about it. That's what I'd

586
00:42:35,320 --> 00:42:38,400
really love us to do. Can't
we all just get along? We could

587
00:42:38,400 --> 00:42:44,119
have cured cancer by now and we
had taken all this energy around data formats

588
00:42:44,280 --> 00:42:49,760
and just put it towards you know, identifying human Gino. Anyway, I'll

589
00:42:49,800 --> 00:42:53,239
get off my soapbox. Okay,
yeah, So, so, um do

590
00:42:53,840 --> 00:43:01,079
this couch based cloud database as a
service I think available Capella. Yeah.

591
00:43:01,119 --> 00:43:07,920
I think it's available on all the
cloud platforms, as well as the you

592
00:43:07,920 --> 00:43:13,599
know, couch base cloud thing,
isn't it. I don't know officially,

593
00:43:14,559 --> 00:43:17,239
I've I do not work for couch
Base. They do not. They do

594
00:43:17,239 --> 00:43:20,840
not you know, give me benefits
or anything like that. So I'm not

595
00:43:20,840 --> 00:43:23,239
a salesperson. I don't know the
full details, and I don't have their

596
00:43:23,239 --> 00:43:27,159
website up in front of me.
I would believe it if you told me

597
00:43:27,199 --> 00:43:30,519
though, because I know they've been
pretty comprehensive. Yeah. Okay, so

598
00:43:30,519 --> 00:43:35,840
so here's a story from on couch
based dot Com from January twenty twenty one.

599
00:43:35,880 --> 00:43:40,079
Couch based Cloud now available on Microsoft
Adger. Yeah okay, yeah,

600
00:43:40,239 --> 00:43:45,920
So I think part of the idea
of cappella is you are treating couch base

601
00:43:46,119 --> 00:43:51,280
as your cloud, but you could
probably specify which cloud provider you're in,

602
00:43:51,519 --> 00:43:53,559
But don't quote me on that.
I don't know that for sure. Yeah,

603
00:43:53,639 --> 00:44:00,320
it looks that way. So run
couch based multi cloud across AWSU and

604
00:44:00,519 --> 00:44:04,239
GCP, so you could do that. There you go, And I think

605
00:44:04,280 --> 00:44:10,880
they're already by the by what you've
said and what I remember conversing with Matthew

606
00:44:10,880 --> 00:44:17,119
Groves, who is one of couch
bases more public figures, I believe part

607
00:44:17,159 --> 00:44:22,119
of what they're trying to do there
is automatically incorporate some of the multi cloud

608
00:44:22,679 --> 00:44:27,440
strategy that people often talk about for
greater reliability. Right, So yeah,

609
00:44:27,480 --> 00:44:30,320
I think so too. Yeah.
I always question that one because the cloud's

610
00:44:30,320 --> 00:44:34,920
out relying all of our data centers, like come on, it's a pretty

611
00:44:34,960 --> 00:44:38,760
big overhead to take on. But
I make to me having the checks box

612
00:44:38,800 --> 00:44:42,320
at him there at least is a
good idea. Whether or not you actually

613
00:44:42,400 --> 00:44:45,159
want to pay for the implementation is
another question entirely Well, it kind of

614
00:44:45,159 --> 00:44:50,960
goes back to two things, right. Number one the reliability argument, which,

615
00:44:51,400 --> 00:44:54,559
given how reliable all three of the
big cloud players are already, I'm

616
00:44:54,559 --> 00:44:59,480
not sure if it's worth it.
But the other is vendor neutrality. Right,

617
00:44:59,559 --> 00:45:04,960
so that if AWS decides to pull
an oracle and bump their prices up

618
00:45:04,960 --> 00:45:07,960
by you know, ten thousand percent, you can say, yeah, okay,

619
00:45:07,960 --> 00:45:10,840
we'll just flip over here to Azure, flip the switch and we're there.

620
00:45:12,000 --> 00:45:15,360
Yeah. But again, like you
said, you know, you pay

621
00:45:15,360 --> 00:45:19,320
a price for that, right,
And vendor neutrality is frequently we got the

622
00:45:19,400 --> 00:45:22,639
job of folks in trouble when we
tried to be vendor neutral, right.

623
00:45:22,719 --> 00:45:27,079
I mean that was part of the
whole or an i ny discussion way back

624
00:45:27,079 --> 00:45:30,280
when was stored procedures were intrinsically tied
to a particular database, ures you automatically

625
00:45:30,280 --> 00:45:35,320
weren't vendor neutral. So therefore stay
away, said the Java community. But

626
00:45:35,440 --> 00:45:40,280
also, I mean he wanted to
have sequel in his app. He wanted

627
00:45:40,320 --> 00:45:45,679
to generate that sequel dynamically, you
know, in the RM because that's how

628
00:45:45,679 --> 00:45:50,079
they work. Yeah, and you
know if he has to go through stored

629
00:45:50,119 --> 00:45:53,559
procedures, that adds a level of
complexity and blah blah blah blah. Yeah,

630
00:45:53,639 --> 00:45:59,679
and it it violates encapsulation, right, you know, just to go

631
00:45:59,719 --> 00:46:04,599
back and put my little whip cream
in a cherry on that because if you

632
00:46:04,719 --> 00:46:12,480
well, I mean I still remembered
back in back in ninety ninety seven here

633
00:46:12,519 --> 00:46:16,880
from another planet. You know,
I was good till the whip Cream showed

634
00:46:16,960 --> 00:46:22,440
up. Everything was come on,
cream show. You are not so naive

635
00:46:22,519 --> 00:46:28,280
as that Richard Campbell. You know
if you've ever been have you ever been

636
00:46:28,280 --> 00:46:32,440
sitting in your cubicle and had somebody
call you up and start yelling at you

637
00:46:32,639 --> 00:46:37,000
because you broke their mission critical app
And you responded with I'm sorry, who

638
00:46:37,039 --> 00:46:43,960
are you? And they're a VP
from like four organizations over because your boss's

639
00:46:44,000 --> 00:46:49,199
boss's boss decided to give away the
schema to your database and then you changed

640
00:46:49,239 --> 00:46:54,119
it because you needed to add it's
it's encapsulation changed to sit that way too

641
00:46:54,119 --> 00:46:58,079
shortly. My line was always I'm
sorry, who are you? And why

642
00:46:58,079 --> 00:47:04,239
shouldn't it tell you to get stuffed? Yeah, that's why I don't make

643
00:47:04,280 --> 00:47:10,920
it incubica on that second part of
it. Yes, well, yeah,

644
00:47:12,000 --> 00:47:15,639
there are very few people in the
world who are less less tactful than me,

645
00:47:15,880 --> 00:47:20,599
Richard Campbell. I'm not saying you're
one of them. I'm awful.

646
00:47:20,880 --> 00:47:23,800
I'm offen tactful. But you know, so what he gone when I see

647
00:47:23,840 --> 00:47:28,000
what? All right? So,
what the hell are we talking about with

648
00:47:28,000 --> 00:47:30,239
the whip cream in the chair you're
gonna put on top of that? I

649
00:47:30,280 --> 00:47:35,320
was just gonna say that whenever,
whenever you have a relational database, your

650
00:47:35,360 --> 00:47:38,760
schema is your is what you seek
to encapsulate. Right. That was part

651
00:47:38,800 --> 00:47:44,320
of the whole reason for stored proxy
is they act as an encapsulation layer.

652
00:47:45,119 --> 00:47:47,960
And you know, if you don't
care to encapsulate your relational database, that's

653
00:47:49,000 --> 00:47:52,599
fine. Just live with the consequences
of vps calling you up and you know

654
00:47:52,719 --> 00:47:57,079
you resisting the urge to tell them
to How did Richard put it? Get

655
00:47:57,159 --> 00:48:01,039
stuffed? That's right, get stuffed
that the day is the polite version for

656
00:48:01,079 --> 00:48:05,960
a podcast? Yes, there you
go. There several of the versions.

657
00:48:06,000 --> 00:48:12,679
I'm sure the listener can contemplate exactly. So what if you're new to the

658
00:48:13,400 --> 00:48:15,559
whole. I can't imagine you're new
to it. But what if you've never

659
00:48:15,719 --> 00:48:22,519
used a document database before. What
are the sort of the reasons that these

660
00:48:22,519 --> 00:48:27,000
things have become, you know,
really popular. So part of the thing

661
00:48:27,119 --> 00:48:35,840
is the document model, the document
data model is it frequently lines up with

662
00:48:35,880 --> 00:48:39,039
some of the things that we're doing. Uh So, for example, the

663
00:48:39,079 --> 00:48:44,480
canonical example for a document store is
a blog. Right, You're maintaining a

664
00:48:44,519 --> 00:48:49,440
weblog. Each entry is a document
in the blog, and there's a bunch

665
00:48:49,480 --> 00:48:52,719
of information around that particular entry,
who wrote it, when they wrote it,

666
00:48:52,840 --> 00:48:55,599
you know, the tags that are
for that particular entry, etc.

667
00:48:57,840 --> 00:49:02,360
But the what I've found the blog
entry, I want everything about the blog

668
00:49:02,519 --> 00:49:07,519
entry, and so I can fetch
that back as a singular document, right.

669
00:49:07,599 --> 00:49:10,760
And there are a lot of cases
where when I'm looking for a thing,

670
00:49:10,800 --> 00:49:15,840
I'm looking for that one thing,
so frequently a customer's order history.

671
00:49:15,199 --> 00:49:19,840
Right. When I'm looking at the
order history, I'm often not looking at

672
00:49:20,440 --> 00:49:25,400
the I'm not looking across the entirety
of all customers to figure out which customers

673
00:49:25,440 --> 00:49:30,639
have a history of ordering toilet paper. I'm looking at this particular customer's order

674
00:49:30,679 --> 00:49:36,000
history because I want to you know, look a look at their list of

675
00:49:36,039 --> 00:49:42,800
purchases because they want to dispute one
or something similar. And so if you're

676
00:49:43,400 --> 00:49:49,079
if sort of the natural data model
that you're working with is one that has

677
00:49:49,239 --> 00:49:52,159
kind of a central piece to it
with some ancillary data. Yeah, a

678
00:49:52,199 --> 00:49:58,159
document data model would work. If
you've ever built a star schema in a

679
00:49:58,199 --> 00:50:01,679
relational database. I would argue that
you are actually building a document model in

680
00:50:01,719 --> 00:50:06,920
a relational database, and in the
end, as a developer, you get

681
00:50:06,920 --> 00:50:12,519
back a list of objects which are
essentially documents in and of themselves, right,

682
00:50:12,559 --> 00:50:15,719
I mean, it's just another way
to think of it. But you

683
00:50:15,760 --> 00:50:20,000
know, we're using Jason all the
time, right to persist and serialize and

684
00:50:20,079 --> 00:50:24,840
de serialize, and so, you
know, actually taking something in Jason and

685
00:50:24,960 --> 00:50:30,280
stuffing it into a relational database actually
in twenty twenty three seems kind of strange

686
00:50:31,000 --> 00:50:34,880
if you think about it. It
takes time. Yeah, right, It's

687
00:50:35,280 --> 00:50:37,679
not just the esthetics of it.
It's the fact that you have to do,

688
00:50:37,760 --> 00:50:42,559
like you were talking about earlier,
I have to serialize that. I

689
00:50:42,559 --> 00:50:45,800
have to take this object model,
which could be cyclical by the way,

690
00:50:45,840 --> 00:50:51,239
which Jason does not deal with well
anymore than exemel, did I have to

691
00:50:51,280 --> 00:50:55,480
take this object model pounded into the
document model of Jason and then ship that

692
00:50:55,639 --> 00:50:59,960
when it comes back, I have
to somehow rehydrate it back to my object

693
00:51:00,039 --> 00:51:04,079
model when it would you know,
in many cases make a lot more sense

694
00:51:04,239 --> 00:51:07,920
to take this and store it oh
natural. It's one of the reasons why

695
00:51:07,920 --> 00:51:12,800
I loved object databases back when they
were popular. Ye because writing code and

696
00:51:12,880 --> 00:51:16,760
droversy sharp. My schema is my
class. We're done here right right,

697
00:51:17,039 --> 00:51:22,639
and so it saves you time and
energy and effort, both at runtime as

698
00:51:22,679 --> 00:51:27,760
well as during development, if you
can store the thing in its natural state.

699
00:51:27,920 --> 00:51:31,360
So I remember talking to Ornini Beck
and Richard probably does too in about

700
00:51:31,440 --> 00:51:35,800
raven dB and all the questions that
I had, Like, you know,

701
00:51:35,840 --> 00:51:42,360
one of the benefits of sequel server
is indexes. You can index fields that

702
00:51:42,400 --> 00:51:45,559
you're going to do queries on,
and then they create these separate databases or

703
00:51:45,599 --> 00:51:51,400
separate tables called indexes, so that
they can be looked up quickly. And

704
00:51:51,599 --> 00:51:57,440
you know, I quickly found out
how how useful an index is when I

705
00:51:57,519 --> 00:52:02,039
did not index a date field in
the old dot net rocks you know thing,

706
00:52:04,199 --> 00:52:07,280
and then I want to do a
query. And this was like on

707
00:52:07,360 --> 00:52:10,519
requests, Like I had web requests
in a database right with a date,

708
00:52:10,960 --> 00:52:14,960
and I wanted to do a quarry
to see how many you know, hits

709
00:52:15,000 --> 00:52:17,599
we got between how many downloads we
got between this date and that date.

710
00:52:17,599 --> 00:52:22,559
And it was like, you know, you know, like sitting there waiting

711
00:52:22,559 --> 00:52:25,960
and waiting and waiting. So I
asked, Uren, you know, how

712
00:52:27,039 --> 00:52:29,920
does how does the document database deal
with that? And I don't know if

713
00:52:30,039 --> 00:52:35,119
couch base and Mango do this,
but raven dB basically looks at what you're

714
00:52:35,159 --> 00:52:40,320
doing and what you're quarrying and builds
indexes on a low priority background thread in

715
00:52:40,360 --> 00:52:45,920
the background. Do they all do
that? Now? So different databases will

716
00:52:45,960 --> 00:52:50,079
do different things, right, And
a lot of this is up to the

717
00:52:50,159 --> 00:52:54,599
database designer. And as a counter
example, I will give you couch dB,

718
00:52:55,079 --> 00:53:00,320
which again is different from couch base. World's worst naming decision by the

719
00:53:00,320 --> 00:53:02,360
way, couch base, yeah,
you know, naming yourself after something else.

720
00:53:04,159 --> 00:53:07,440
But in couch dB, they actually
what we would think about in terms

721
00:53:07,480 --> 00:53:10,519
of indexes and so forth. They
call views, and they build them ahead

722
00:53:10,519 --> 00:53:15,320
of time, and every time you
insert or remove data, they modify the

723
00:53:15,440 --> 00:53:22,960
view and so there, they are
choosing to optimize for reads as opposed to

724
00:53:23,039 --> 00:53:27,840
doing that look up at later,
you know, because it takes time to

725
00:53:27,880 --> 00:53:31,239
do that when you write something into
the database serviously, right, So it

726
00:53:31,360 --> 00:53:36,440
really is one of those things that
the database designers can do, you know,

727
00:53:36,719 --> 00:53:38,320
based on the decisions they want to
make. Right. So, in

728
00:53:38,320 --> 00:53:43,239
the case of RABDB, if they
do that indexing on a low priority thread,

729
00:53:43,800 --> 00:53:49,360
their assumption is that you're not going
to immediately query along these indices once

730
00:53:49,400 --> 00:53:52,760
you've put something in, or they're
willing to take the performance hit, you

731
00:53:52,800 --> 00:53:59,199
know, while we're doing this.
Other databases, you know, particularly a

732
00:53:59,239 --> 00:54:04,519
lot of the relational databases, because
they wanted to maintain those acid level semantics,

733
00:54:05,079 --> 00:54:08,719
they would do that indexing during the
query and not return to you until

734
00:54:08,760 --> 00:54:14,840
all the indexes were updated and everything
was correct. Kind of and I'm like,

735
00:54:15,159 --> 00:54:19,639
well, it depends on what you
want. It kind of defeats the

736
00:54:19,679 --> 00:54:22,639
purpose having an index, right,
Oh, the first time you actually query

737
00:54:22,639 --> 00:54:24,960
with these fields, yeah, you're
gonna have to wait on that. We'll

738
00:54:25,000 --> 00:54:29,119
be back to you in a few
minutes. Thanks. Well, and that's

739
00:54:29,159 --> 00:54:32,440
why the RDBMS said, we'll update
them all while you're putting the data will

740
00:54:32,480 --> 00:54:37,880
make sure that the index is always
ready to go. So you come back

741
00:54:37,880 --> 00:54:40,320
and issue a query right after doing
that, insert updata, delete, We're

742
00:54:40,360 --> 00:54:44,480
ready for you. We're good to
go. You just paid for it though

743
00:54:44,719 --> 00:54:50,480
while you were waiting for that initial
data modification to okay. Different databases will

744
00:54:50,519 --> 00:54:54,360
make different decisions, and that's you
know, that's part of the Just like

745
00:54:54,400 --> 00:54:59,360
there's certain things that are fun from
a language designer's perspective, this is part

746
00:54:59,400 --> 00:55:04,119
of the fun a database designer is
to say, I'm going to choose you

747
00:55:04,199 --> 00:55:08,199
know, or in some cases,
I'm going to make that slider available to

748
00:55:08,320 --> 00:55:12,960
you the DBA to be able to
decide where do we want off them?

749
00:55:13,039 --> 00:55:16,960
So you know, of obviously a
lot about these different things are Is there

750
00:55:16,960 --> 00:55:22,800
anything in couch base that you wish
they would have done differently or better or

751
00:55:22,840 --> 00:55:34,280
other? You know, the I
have become enamored of graph databases in general.

752
00:55:35,199 --> 00:55:39,480
I think that the graph model is
one that is actually probably the hardest

753
00:55:39,599 --> 00:55:44,639
to replicate in other data. And
how's that different from the document? Instead

754
00:55:44,679 --> 00:55:47,559
of pointing from one document to another, you duplicate it and have a tree

755
00:55:47,800 --> 00:55:54,079
for every record or what. So
a graph database is something that will support

756
00:55:54,079 --> 00:56:00,199
cyclical references very easily. So the
canonical example here is, let's us that

757
00:56:00,239 --> 00:56:05,599
we want to represent, um,
you know, the six, the three

758
00:56:05,639 --> 00:56:09,320
of us and our respective spouses in
a document. And so we have person,

759
00:56:09,639 --> 00:56:14,920
right, I'll use the the XMLA. We have an XML tag called

760
00:56:14,960 --> 00:56:20,320
person first named Carl, last named
Franklin. Now you're married, so we'll

761
00:56:20,360 --> 00:56:23,719
have a spouse field there which has
you know, first named, last named

762
00:56:23,760 --> 00:56:28,039
spouse, which has you first named, last named spouse, which has her,

763
00:56:29,000 --> 00:56:34,800
And suddenly we get into this deep
infinite recursion. Right, So either

764
00:56:35,079 --> 00:56:38,679
we can't really represent persons. The
way we think of ourselves is I have

765
00:56:38,800 --> 00:56:44,360
a spouse that is a property of
me, the person. Whereas in a

766
00:56:44,519 --> 00:56:50,360
graph database, fundamentally the data structure
is nodes and arcs. So we have

767
00:56:50,639 --> 00:56:53,960
node first name, you know,
Richard, last named Campbell, and then

768
00:56:54,039 --> 00:56:59,320
we have an ARC to another node
first named Stacy, last name Holt,

769
00:56:59,639 --> 00:57:05,239
and at arc can have in fact
data associated with it, such as beginning

770
00:57:05,239 --> 00:57:08,079
of the marriage, you know,
and if if they get divorced, end

771
00:57:08,079 --> 00:57:14,679
of the marriage. So the ARC
is sort of like a relationship, right,

772
00:57:15,039 --> 00:57:17,880
it's a connection to connection between these
two nodes, right, at it.

773
00:57:19,360 --> 00:57:23,079
And so if you've ever tried to
model genealogy data, if you ever

774
00:57:23,119 --> 00:57:29,280
looked at a you know, genealogy
database, particularly because you know, in

775
00:57:29,320 --> 00:57:32,199
some cases, not only can two
people have been married and then got divorced,

776
00:57:32,239 --> 00:57:37,000
but they could get married again,
right, and so those would just

777
00:57:37,119 --> 00:57:40,880
be two separate arcs or one arc
with a begin and begin end. It's

778
00:57:40,880 --> 00:57:44,800
like going to the fridge and saying, oh, this milk is spoiled.

779
00:57:45,199 --> 00:57:50,239
Well maybe tomorrow really fresh, right, yeah exactly, We'll leave We'll leave

780
00:57:50,280 --> 00:57:52,400
people's you know, life choices off
to the side. We still need to

781
00:57:52,440 --> 00:57:55,480
be able to model it. And
so graph databases do that. They handle

782
00:57:55,599 --> 00:58:01,599
those cyclical relationships very very well,
much better than Jason. And this is

783
00:58:01,599 --> 00:58:05,519
funny because Jason an ex Amel are
very similar in the sense that they are

784
00:58:05,519 --> 00:58:09,320
both kind of a hierarchical and must
form a tree. Yeah right, exactly

785
00:58:09,440 --> 00:58:14,920
exactly. So that's the one thing
is I wish couch Base had, you

786
00:58:14,960 --> 00:58:16,199
know, I wish they had a
little bit better in the way of graphic

787
00:58:16,199 --> 00:58:21,199
support. But that is one of
those things that's very very tricky to store,

788
00:58:21,599 --> 00:58:25,599
and particularly to do so distributed.
And so you know, there are

789
00:58:25,639 --> 00:58:29,960
certain points at which you say,
if I want to be everything to everybody,

790
00:58:30,239 --> 00:58:32,280
I'm probably going to be not very
good to anybody. I'm trying to

791
00:58:32,280 --> 00:58:37,280
think of how I would approach that
relationship thing. With spouses. You would

792
00:58:37,360 --> 00:58:45,840
probably have like a groups, you
know, table with person IDs basically,

793
00:58:45,960 --> 00:58:51,800
right, So you'd have a group
and then this group name is spouse or

794
00:58:51,840 --> 00:58:55,639
whatever spouses, and then you'd have
the people that are because now you get

795
00:58:55,679 --> 00:59:00,960
into right, what if you're polyamorous? What if you have two spouse which

796
00:59:00,039 --> 00:59:05,239
is legal in some states. Yeah, I guess we were talking about data

797
00:59:05,320 --> 00:59:09,360
sooner or later than many too many
conversation was going to come well you know,

798
00:59:10,760 --> 00:59:15,920
yeah, I mean it's it's um
there there have been ways to be

799
00:59:16,039 --> 00:59:22,440
able to model graphs in for example, a relational database model, and Joe

800
00:59:22,480 --> 00:59:28,119
Selko has a book that is about
as thick as your head and that should

801
00:59:28,159 --> 00:59:35,280
tell you how to do it right
exactly reading this for a while, yes,

802
00:59:35,599 --> 00:59:39,119
exactly exactly. Well, friends,
Yeah, I guess that's a conversation.

803
00:59:39,719 --> 00:59:43,559
I missed you guys. We need
to do this, absolutely sure.

804
00:59:43,960 --> 00:59:49,079
I missed you too, man,
So well, thanks and come back soon.

805
00:59:49,639 --> 00:59:52,440
I will be happy to come back
what's what's your schedule look like tomorrow?

806
00:59:52,480 --> 00:59:57,159
Come on over next day. I
got a barbecue there. You go,

807
00:59:57,760 --> 00:59:59,760
all right, it's bound to be
some smoke. Meet around here,

808
00:59:59,760 --> 01:00:25,559
something absolutely there and we'll see you
next time on dot net rocks. Dot

809
01:00:25,559 --> 01:00:30,960
net Rocks is brought to you by
Franklin's Net and produced by Pop Studios,

810
01:00:30,320 --> 01:00:36,599
a full service audio, video and
post production facility located physically in New London,

811
01:00:36,599 --> 01:00:42,239
Connecticut, and of course in the
cloud online at pwop dot com.

812
01:00:42,480 --> 01:00:46,920
Visit our website at dt n et
r ocks dot com for RSS feeds,

813
01:00:47,159 --> 01:00:52,880
downloads, mobile apps, comments,
and access to the full archives going back

814
01:00:52,880 --> 01:00:57,320
to show number one, recorded in
September two thousand and two. And make

815
01:00:57,360 --> 01:01:00,960
sure you check out our sponsors.
They keep us in business. Now go

816
01:01:00,000 --> 01:01:05,679
write some code. See you next
time. You got a dead metal bands

817
01:01:06,000 --> 01:01:12,039
down. Slama is hard
