‫Roe versus Collum oriented databased storages are two style of bewitch databases used to store their
‫tables on disk, each have pros and cons.
‫Nothing is perfect.
‫There are use cases for column oriented.
‫There are use cases for ROE oriented databases.
‫And this video, I want to discuss what is a role oriented database or also called role store database,
‫because that's that's the store type.
‫How is it stored on desk right now?
‫Got to also describe the column oriented database or also known as Column Sterol.
‫Another fancy name is called Menar Database because.
‫Yeah, why not just confuse everybody, buy new by inventing new names.
‫So it's all in the same thing.
‫Just see how things are stored on this.
‫We're going to talk about the differences too.
‫And then finally going to discuss pros and cons of both.
‫How about we jump into it, guys?
‫Auriga.
‫So let's say we have a beautiful table like this.
‫It's an employee's table, doesn't only have eight roles that have thousands of thousands of rows,
‫but for some lazy we only have these.
‫These are the columns.
‫Straightforward and the first I want to bring attention to this, this is the real I.D. This is how
‫databases it's a unique identifier that identifies that it's different than the primary key or this
‫I.D. It's just something that has most of the time most databases have this internal mechanism to identify
‫this role.
‫And I want you to pay attention to this.
‫So if I'm going to submit a bunch of queries on this table, I want to do this without any indexes because
‫indexes will just complicate the manner.
‫And by the way, we think about column versus roll.
‫Again, I don't I want to take them out of the equation and think about them.
‫Just we don't have any indexes.
‫Were just scanning the table to try to answer these following questions.
‫So these are the following queries that I'm going to execute on our database.
‫And then I'm going to ask you the same exact query.
‫Don't call column database and see which one does best.
‫They're for each style of how we're going to store these stables.
‫Right.
‫The same thing we're going to store tomorrow, the same day we're going to start on column storage and
‫then we're going to look at how these queries perform.
‫So select first name from Blois, where Social Security number 666, The Devil.
‫And then we're going to select store from employee where ID equal one very simple game.
‫And the final is to select some.
‫We're just going to sum all the salaries of the employees for some reason.
‫So the first one, rule oriented databases.
‫So for me oriented databases, tables are stored as rolls on disk.
‫And this might sound a little bit confusing when you first read it.
‫Of course, Hosain, how else are you going to store stuff in the day you get a store roll by it?
‫All right.
‫So if you think of the disk as a blob, huge blob store of just things that you just just a bunch of
‫bits and bytes, then the rows are just contiguous, one after the other.
‫So the ID followed by the first name, followed by the second one last thing that followed by their
‫search was to go down and then comma and then the second row starts.
‫Right.
‫And then so on.
‫Each row obviously has a different size.
‫It could be variable size because I don't know.
‫So like my my name is John Smith and someone else named Hussein Mohamed.
‫Right.
‫So that's a longer name.
‫So it's going to occupy more storage on disk, obviously.
‫And that's the rules can get very much for simplicity.
‫Just think of was their fixed size roles.
‫All right.
‫When I want to read a particular row.
‫I go, I do an operation on desk called, I read when I read this stuff that controller, whether this
‫is an SSD drive or a hard disk, reads and blocks, it doesn't read like bit by bit more.
‫Oh, but zero one zero one doesn't really like that.
‫It really just a block.
‫So let's shove 512 bytes at a time and when you or I don't know, a thousand twenty four bytes at a
‫time depends on the block size.
‫There's something called block side.
‫And once you read that you're going to get not only one roll, you could get one, two, three, four,
‫five rows in a given block.
‫So you get the act of doing one.
‫You can give you five rows and just not all these five rows, five rows and all their columns or their
‫values.
‫So.
‫So whether you want them or not, you're going to get everything.
‫You're going to get all the columns.
‫So think about that.
‫So technically, you need more Io's to find the row you're looking for.
‫So imagine you're doing us a table sequential scan on on the entire table.
‫So if you're looking for employee with a Social Security number 666, you're going to have to do a block.
‫I oh, you got, I don't know, seven rows.
‫Then search these rows one by one.
‫You're only interested in the Social Security number, so you're going to only pick that field.
‫Unfortunately, you you got all the fields.
‫Not saying that's bad.
‫Could be bad.
‫Could be good.
‫Depends what you're doing, but that's what you have to work with.
‫So you have to do a lot of Io's to to to actually get to the role that you were looking for because
‫you spent a lot of wasteful reads pulling columns that you didn't need and you don't have a choice.
‫Right.
‫So that's that's just one thing you have to think about with your oriented as I'm in there.
‫But no, they are beautiful.
‫They are elegantly designed because they are so simple.
‫They are just the rules.
‫And you can easily think about them.
‫You can easily implement them compared to what we're going to come up next.
‫So let's dive deep into this.
‫So we're going to take our table and then we're going to convert into a rule based on desk.
‫How would how will this look like?
‫Let's take a look.
‫This is how we're going to look like, so imagine this gray box as a block, right?
‫And for simplicity, I bought I put two rows in the same block.
‫Could be three.
‫Could be four.
‫Could be five.
‫Whoknows, right.
‫Depends on the block size.
‫But think about this as as a given block, each gray box takes one eye or jump to the controller to
‫pull that block.
‫So once you did you ask for this block.
‫You got everything son.
‫You got everything right.
‫So now this is how it is stored.
‫Basically the raw.
‫Come on, really.
‫Come on.
‫It's just literally consequent right.
‫Values.
‫But I just add a comma for you guys to understand that ID first names like a last name SSN or the celery
‫birth date, I guess when this John the occupation and so on.
‫And so you can see that and this I added this so it can indicate the second drawer.
‫It doesn't really exist.
‫It's just an identifier like to allow that.
‫Oh, this is actually a second row that just started and an arrow just ended.
‫And you can see that we these are the two rows, two rows tourism.
‫So let's execute our first query against a row oriented database.
‫I'm looking for the first name for employee where their Social Security number 666, that four.
‫All right.
‫So let's pull it.
‫What do we do?
‫We ask because I don't know, I have to start from the top, right, because I don't know where it employs
‫six six six is something like this.
‫No, this field has any relation to the role itself is just a random value.
‫Right.
‫So I have to pull the first block of the table.
‫Does sex, sex, sex exist in this NUPE?
‫This is two to two, and this guy is one one one, that's the social worker, so let's pull the second
‫block, right.
‫Nope, it doesn't exist.
‫This is four four four three three three, right.
‫And yeah, it might look sorted, but it doesn't have to be sorted.
‫Guys, just this is just I'm I'm walking through that area with you.
‫Right.
‫Again, noindex is nothing.
‫Now, I'm going to.
‫Pull the next block, so I did three reads and then I happen to find that six, six, six.
‫So I found what I'm looking for now.
‫I want the first name.
‫That's what I don't need to do any extra read y because the first name is right there in the memory
‫now, because once I pull this block, it's a memory, it's in the ramp and when I ask for it, I don't
‫have to go back to the desk because yeah, guess what, I just pulled it.
‫I found it.
‫Now I just think this is the first thing.
‫And I know because the position this position number two is the first time to pull it.
‫So once I find something, asking for extra columns are really cheap because we we already got them
‫right again.
‫Guys, you have to think about this.
‫Whatever I'm going to explain to you, there is no bad or good depends on your use case, depending
‫on your query.
‫That depends on your clauses.
‫And based on that, you pick roll versus column this week.
‫I'm going to come to that.
‫So that's the first query.
‫Let's do another query.
‫Is there another way?
‫No, I guess it's executed immediately.
‫All right, so we're going to do a select star from employee where I'd equal one, right?
‫And since it's already equal one, this if this is a sequence, the database can do tricks where it
‫can link this sequence with that idea says, OK, I.D. one is on four thousand and one.
‫So I know actually where to jump and pull this roll this block.
‫Right.
‫It doesn't have to read other things, but it happened to be that this the first book is what we're
‫looking for.
‫So yeah, we're lucky I guess.
‫But even if we don't have this track where we link the ID to the real ID, we still have to go through
‫each block.
‫And once we find the block, we won't guess what.
‫Now I want all the columns.
‫Can I do this?
‫Absolutely.
‫That is so cheap because all the columns are already a memory, assuming they are not vertically partitioned
‫into another location.
‫Right, vertical partition.
‫I talked about that and many times and in my channels and my courses.
‫So vertical partitioning where we take a column and put it somewhere else.
‫Right.
‫This is not the case where everything is in one beautiful block.
‫So I, I pulled the block, I asked for the I.D., I found the I.D. and now the user is asking for every
‫field.
‫I always tell people that, hey, selects those bad guys, stay away from it.
‫But it really depends what you're trying to do.
‫If you have indexes, try to do less of that stuff.
‫So next thing, we're going to learn that it's the worst thing you can do in a column oriented database.
‫So let's start enroll.
‫You can live without it, I guess.
‫Still.
‫Just just be aware of that, so that's cheap, that's relatively cheap because I'm going to pull all
‫the roads and everything and memory beautiful assume fit in memory.
‫So could it could only be one block.
‫Not necessarily because a road can span multiple blocks if it's too huge.
‫I say we have a, I don't know, some blob here field and I it's a bad idea to store Blob's in line
‫and you way, but let's assume you do.
‫But that means this block, this road can span seven blocks for example.
‫So you need to read all the block.
‫Not necessarily.
‫The data are smart.
‫It's going to be the first block.
‫Find the ID and only the rows.
‫The, the columns you asked for is going to ask for the rest of the block to to fetch your stuff.
‫Then I would have been doing this for years.
‫They know what they doing.
‫But I want you just I want to explain how is doing this stuff.
‫Awesome.
‫So let's do the same thing.
‫But in aggregate this is called an aggregate function, which is an aggregate.
‫It's just grouping by something.
‫Right.
‫So you work on one or a few columns, mainly one or less.
‫How do you work with all of that's just
‫an idea.
‫OK, so you work with a few columns or let's say one in this example.
‫OK, so select some salary from employers.
‫Just some.
‫Every other.
‫Let's do this.
‫So we pick the first block.
‫Well, tough luck, I only wanted to say tough luck.
‫I got everything again.
‫No indexes here with indexes.
‫This could be extremely fast, but I'm I'm just telling you what the database does without indexes.
‫So you pull this oh.
‫Back this early.
‫It's one thousand and one and one thousand two.
‫So we summed those two.
‫Now let's pull the next block so we get the Mauro's.
‫OK, one thousand one hundred and three one of Riquet went off OK, some of them.
‫And then pull one oh five or six, some of them.
‫So guys, every block we try, we pull, we're pulling Roy these are pulling first names and last names,
‫bonuses and we're pulling salary opening there, which we never use.
‫Right.
‫So imagine if I only asked for the for the salaries and if they were they were grouped nicely, that
‫would be awesome, wouldn't it?
‫But now, unfortunately, we're asking for salary, but we're pulling all the rules.
‫So that's a lot of iio.
‫So again, this is not just one read.
‫It can appear in this.
‫He has a one read.
‫If the road is long, you can read seven blocks.
‫So that's seven Io's, right?
‫I mean, the other databases can do a trick where they send one request asynchronously, read multiple
‫blocks.
‫But regardless, you're hitting the desk, which which every time you hit the desk is a duck dies essentially.
‫Right.
‫So try to save Ducks' as much as possible.
‫Save the ducks, guys.
‫Save the ducks.
‫So yeah.
‫Reading, reading and well something well something all of that stuff.
‫That's not so bad I guess.
‫Yeah.
‫But you read unnecessary information.
‫That means you almost read the entire table.
‫But used very.
‫Very small portion of it that's extremely inefficient, so raw data doesn't do well, this kind of squares,
‫if you think about it, it doesn't mean it's slow, really depends what you mean by slow.
‫I mean, you you have run these kind of databases, do all kind of tricks to be fast.
‫But if you think about the logic and I'm not saying this is how databases absolutely work, they have
‫all sorts of trick.
‫Again, multi threading.
‫They send multiple threads, Boscastle and multiple thread to read asynchronously.
‫So so they do all sorts of work to do fast.
‫But let's discuss how column oriented databases work.
‫So old Coolmore into databases.
‫If you think about them, tables are stored as columns first and disk.
‫So think about.
‫The first name called.
‫The I'd call the last name call.
‫So what they do is they take the first name and they take all possible values.
‫John, Melissa.
‫Rik, Paul, Hussein, everybody, and pull all of these into and in and save them and desk as consequence
‫value, and then once that table is done and that their last value of the first name is done, they
‫start with the second one last name and then and then so on.
‫So you might say, oh, why are we doing this?
‫And we're going to come to that.
‫So a single book I'll read to the table features multiple columns with all matching rows.
‫So it features a column.
‫It could be fish one column or multiple depends, it depends like if you have a small table, you can
‫fish multiple one.
‫If you ask the database's, hey, give me this.
‫You're going to get a lot of arrows.
‫That's the trick here.
‫So single call with a lot of those lists.
‫Io's are required to get more values of a given column.
‫Right, because.
‫If you want to get, as we said, the first hundred salaries, that is extremely efficient and goal
‫oriented because they just go to the place where we know we started the salary column and just walk
‫through there because you get to see the values just consequent.
‫We're going to go to the example and they are great on online and process, as we're going to see and
‫then in the coming slides.
‫All right.
‫So let's take the same exact table and start as Comb's.
‫Here's how it looks like.
‫Again, the ride is very critical here.
‫The I.D. field is this.
‫This is the first name that can last name.
‫I keep saying second Social Security number.
‫This is the salary, the date of birth, the that title, I think.
‫And this is the joint date.
‫Look at this.
‫So look at this.
‫Want the ID one and this, which is this thousand and one.
‫I need to withdraw three thousand three.
‫Why we're going to we're going to see look at this.
‫The wrong idea is duplicated in every column.
‫So just like that, what is the first thing that comes to mind or anything is going to be painful?
‫Because anything if you delete roll 2004, you have to boo boo, boo, boo, boo boo.
‫You have to go and mark all these stupid columns or these blocks.
‫Remember, these are blocks, right?
‫So and for fun, I split some of them and multiple blocks doesn't mean they are like, I know this is
‫an integer, for example, or string.
‫I just split them for me that OK, we couldn't store all all four rolls here in one block, so we had
‫to split it another block.
‫Right.
‫So I can show you a different kind of examples.
‫Again, take it with a grain of salt.
‫I just want to explain this things to you.
‫So this is one block to block to block two blocks, one block, one block, one block, one block.
‫OK, got it.
‫So this is how it works.
‫So they just store all this stuff in columns.
‫So all the Eidsvold the entire the entire table's here.
‫Right.
‫All the possible values.
‫So this is not just one block.
‫Could be hundreds of thousands of blocks if you have a lot of rows.
‫Remember, everything need to be updated.
‫If you add a new role, you have to get that updated in all of these logical structures.
‫So what that being said, now we know how this works.
‫Let's put it to the test.
‫Select first name from employee where Social Security number six six six.
‫So now the database will say, wait a second, you're looking for Social Security number.
‫I don't need to look at any of other logical structures except for the Social Security, which is this
‫puppy.
‫This is the Social Security data descried.
‫This is how I know this is the location.
‫So in DESC, I know where to point my needle and read this stuff.
‫So to search for Social Security number, I only need to pull this right.
‫So now I start reading block by block.
‫I need first block and I got a lot of beautiful values.
‫I got five five five four four, four, three, two, one, two, one.
‫We did not get six six.
‫So no.
‫OK, no problem.
‫Let's pull the second block.
‫This is almost like the roll based, but now add the column level.
‫Does that make sense.
‫So now we got it.
‫We found it.
‫But now I need the first name.
‫What first name is not here, son?
‫You only got the six six now, you found that this is actually 2006.
‫That's almost like an in how indexing works.
‫If you think about it, this is how Posterous stores indexes.
‫Actually, if you think about this as an index, it's almost very similar.
‫Right?
‫It just points to the row now, 2006.
‫Roll twenty six, I know this value, I know the roll I'm looking for, this is very critical and I
‫am asked for the first name was the first name.
‫The first name is right here.
‫This is the first name.
‫So I'm not going to read these, blah.
‫I'm only going to jump right here.
‫Right.
‫So obviously we found this row, as we said, and then we can jump.
‫Right, not the first block.
‫I'm going to jump to this block, you might say.
‫I was saying, how did you know that it's in this block and you didn't pull this block because I know
‫the wrong number.
‫And the database does all sorts of trick to to say, OK, this block has only rose from one thousand
‫and one to the 1004.
‫Right.
‫So I'm going to jump to block number seven hundred and three because it exactly locate the row I want
‫because they have all this metadata mumbo-jumbo.
‫Right.
‫Again, that's back to the our question.
‫The 1006 link with a block is all there.
‫They know and they pull it and they find it.
‫So we had to do one jump.
‫One block, right.
‫Second block read, jumped back to another block read and then we got it.
‫So three.
‫No, that's so bad.
‫I guess let's just start from employee where it equal.
‫OK, let's see how how come how our beautiful co index Culham Storage do.
‫All right.
‫So I'd equal one again.
‫I don't have any knowledge of this so I'm going to start idy whereas idee this is dite.
‫So I need only to read these structures.
‫Right, let's put it.
‫Found one thousand and one, so now I have knowledge of the role, I know which book to read.
‫But.
‫The user asked me for everything, OK, let's jump on, OK, we found that jump onto the first name.
‫We know which blog to read, so this one put, that's one read, let's jump one over AIO.
‫Last name, because they want the last name, they want everything read, OK, founded because I know
‫I don't need to read this because I only know which block exactly in each column to read to find my
‫value.
‫All right.
‫This is in fine read.
‫Salary read, birthday read engineer, I have a bug here, I should have I didn't stretch it enough.
‫Engineer Reid.
‫And joined it read.
‫What have we done, guys?
‫This is the worst query, there is so much thrashing happening on disk that this is the worst thing
‫you can do.
‫Call them databases, just tanks when you do this, especially if you have a lot of columns and you're
‫asking for everything, and especially if you have like a lot of and queries or queries here where you
‫had to jump to find that in multiple rows.
‫There will dude, dude, dude, that dude endou that I'm talking to both of you, dude, dude that do
‫not do this.
‫So let's start with the raw stories and columns.
‫Stories do not do select stuff.
‫This is do you know how many ducks die when you do this kind of queries.
‫Guys, you go to the database, you read all these damn ducks, every IO kills a duck.
‫Right.
‫Save the ducks please, guys.
‫All right, let's do this like some celery for our employees.
‫Know that we saw how horrible column oriented databases can be.
‫Let's see how great they are.
‫I want to sum all the salaries.
‫Yes, sir.
‫What is the salary field?
‫There it is.
‫One read dun dun.
‫Well, if you have if you live in multiple blocks, are you going to read the multiple blocks.
‫But done.
‫That's it.
‫And if you have caching and stuff like that.
‫Hmm.
‫And by the way, I didn't mention something.
‫If you, if people, multiple people have the same salary, column oriented databases do something called
‫compression and aggregate, they actually if let's say if if three people have 100000 salary, OK,
‫all of them have a lot of calories.
‫Right.
‫They have a lot of calories.
‫And then you can you can just have one in three, one hundred thousand with a comma besides one thousand
‫three, one thousand four, one thousand and five.
‫All of them have the same one.
‫So this is even more compact.
‫So this will give me a lot of bang for my buck by just doing one block again.
‫I sometimes if I if there is like a duplication new, this is the best thing for going the database
‫that you just shove it in the same row because they go they were going to do it as an array.
‫We talked about that a little bit in my Postgres Thirteen Polska thirteen.
‫They just started doing this index deduplication I believe they call it B three D duplication.
‫Postgres version thirteen.
‫They start shoving more duplicated values in a single leaf node so they can compress comparison.
‫So yeah, pros and cons.
‫Is this thing perfect.
‫Nope, nope, nope, nope.
‫Nothing.
‫But it depends on your use case guys.
‫And if you ask me, I still prefer Rabassa to be honest.
‫Just simplicity overrides and reads.
‫But there are some cases where you need column orienteers to summarize.
‫Right, right.
‫And reads you want a simple structure.
‫And we saw how complex column stores are.
‫Right.
‫They're very complex.
‫They you have to duplicate that.
‫You have to show that the the row IDs everywhere.
‫That can be a little bit messy for right and slow.
‫Right.
‫And that's why a lot of people use column based and warehouses and stuff like that and lakes, data
‫lakes where things are just almost static.
‫They don't edit and they just do a lot of analytics on a single column.
‫So that's powerful stuff.
‫Right.
‫So let's go through these pros and cons in general.
‫So for based, it's very optimal for read and write, right.
‫And end.
‫Well, I'm going to say read and write.
‫I'm going to say transactions in general or online transactional processing are they are very good for
‫this because they are very simple in their implementation.
‫So if something simple, we can enhance it and make it more and more efficient as we go, right, that's
‫why a writer fast reads almost fast.
‫It depends what how your career it looks like we saw some examples, right?
‫Online transfer transfer, online transaction protocols and processing transactions are great for Rule-based
‫because you start a transaction when we know what exactly what rules, what blocks to touch, we can
‫write the wall, the right ahead log efficiently because we know exactly where we're changing right
‫versus column, the small little bit.
‫The structure is all over.
‫The place that we have to do a scattershot compression isn't really as effective, though, because
‫that.
‫Think about it.
‫No, I'm not talking about the do duplication.
‫That's something you can do in the next.
‫I'm talking about just the idea of having the values in the in the role.
‫The role itself is almost distinct, right?
‫It's almost like a hash because it consists of different fields.
‫And so you can really easily compress it.
‫Right.
‫The compression algorithms is not going to find a lot of tweaks to compress because the values are not
‫consequence.
‫Right.
‫Compared to the column oriented.
‫Where are they?
‫The consequent values are almost the same type and almost the same thing.
‫Right.
‫So you're going to get a lot of chances were of duplication, like you get a lot of people named John.
‫Right.
‫So John's are going to be squashed together.
‫So compression is not as efficient withdraws because you get all these different things that are next
‫to each other and are completely different.
‫So we can't compress as effectively aggregation.
‫We saw how poorly the Rome based database did with the with the aggregation.
‫I mean, we had to query the whole table, but we we pulled.
‫Lots of information that we didn't pick, so column oriented databases were more efficient when it comes
‫to aggregation because we fetch only what we need and we we work on that.
‫So if you if you started switching information or data that that are only what you need, then you're
‫going to start you you'd be very, very efficient in your query and you only fetch the information that
‫you need.
‫Right.
‫So obviously you're going to have a lot and you're going to finish faster than than raw oriented databases,
‫efficient queries with multi columns.
‫Right.
‫So if you're picking multiple columns in a query or working with multiple columns, usually.
‫Rural oriented or better?
‫Right, and again, depends on talking only about the queries itself, right.
‫So you can have a lot of columns if you want to, but if you're only working with a few of them, that's
‫absolutely fine with column oriented databases, but.
‫If you're actually working on touching all this Combes, I could be about right with Kamaran, with
‫Wetherall, we saw it write a fetch on the road, give us almost all the columns against you unless
‫you have vertical partition.
‫So we'll call them based are slower because we have to update all these beautiful structures.
‫Every column has almost a structure on itself.
‫Think of it this way.
‫How is this stored?
‫So I need to know where is it located and touch it, touch it, touch it.
‫Every column.
‫Right, like very similar to indexes if you think they are perfect for online analytical processing.
‫So if you're doing analysis, you're not touching, you're not writing perfect.
‫Cormoran to databased.
‫It compress greatly because all similar sampling are together.
‫So you can put the compression algorithms can do magic on these things and compress them.
‫Amazing for aggregation we so be done.
‫Right.
‫That was, that was amazing.
‫I'm going to, I got, I got tired of it and finally it's inefficient for queries.
‫Well the multiple comes if you're working, if you're asking for all columns, don't do a calm, don't
‫do a column.
‫I know there's a little bit of where you think that column oriented database's or Colmar into deadest
‫or column number will be great if you're asking for a lot of columns.
‫Nope, they are the worst of this stuff.
‫I know guys Postgres, my school, other database's, most of them are Robair storage.
‫However, S.P.C.A. and others have Oracle, I believe most databases by default.
‫Gaudreau row row based storage.
‫However, if you think about it, they have database storage engine and we talked about database storage
‫and my database scores and my YouTube channel as well.
‫I talked about that, how our database engine, you can swizzle this database engine for a given table
‫so every table you can pick a table and you store this table as Collum store and you can pick another
‫table and start as store.
‫You can Switzler database engine.
‫Right.
‫Based on that, you can just change your database engine for every table based on the needs.
‫If you have a table that only get queried, make it column, for example.
‫Right.
‫If you're doing a lot of analytics on it, make it a call.
‫Right.
‫If you're doing a lot of rights, probably you want to make it a raw store.
‫Right.
‫And think about all of this stuff like you cannot, for example, join a road based store, call a table
‫with a column based table.
‫Right.
‫That's just bad.
‫I mean, some day there is a support, but give them give them a break, guys.
‫Give them a break, because that will be really disastrous.
‫I can't even imagine what the database will do.
‫It was going to freak out, I guess our guys.
‫That's it for me today.
‫What do you think about these two puppies?
‫Let me know in the comments section below.
‫I'm going to see you in the next one.
‫You guys, they awesome.