Merken

ActiveRecord vs. Ecto: A Tale of Two ORMs

Zitierlink des Filmsegments
Embed Code

Automatisierte Medienanalyse

Beta
Erkannte Entitäten
Sprachtranskript
thank you very much and that the will the good and the let was ready running a rocket pro-poor this is talk about object-relational mappers or it's simply comparing interesting echo in Active Record actually is the norm for for Phoenix which is a web framework for
lecture so that's a is a relatively new programming language was created by this guy was in England but he was a longtime a member of rails against lit often we started so is a programming language but is really languages very very fast as functional language that Ruby as syntax and it's designed for a very very high concurrency does that very well and and
elixir action compulsitor by Sir was this language on made for massively scalable soft real-time systems requirements of high availability of early was amended by this guy
Joe Armstrong way back in the eighties for for telephone systems so this year usually it ends in at the time and you will stop at this telephone switch which had rent million lines lines with the 19 nineties times availability and so this is the kind of thing so if you wanted to like the full-system system phrases to serve the entire continent of Europe but you've you've figured out how to do that with this incredible technology it's it's some it's really sort of amazing it it was then with that in eighties but it kind of popularity when the Internet story came around the nineties we didn't need those kind that kind of high concurrency real-time systems you know Pearl job can became the de-facto languages of the Internet and Erlang Canada was forgotten about a little bit but but it sort of made a comeback recently as people have realized that the use cases for that kind of stuff on the internet and when it
was really need about is if you have a much servers running running elixir relying on you can run thousands of processors concurrently and they cannot communicate with each other and they can communicate across machines so these little green boxes symbolize prophecies right so imagine this is this is telecom technology so that you're writing thousands thousands of phone calls in real time and you have the server deployment on the kind of automatically because it automatically Costa and I and use real-time distributed systems such as
many of the things earlier sort of like this ugly Ferrari it's incredibly fast the technology of like really difficult weird syntax it's not very user-friendly
so along came was a crane Alexa which is basically runs on aligned with that sort of a obvious kind of syntax it's realized pretty really this this similarity with reviews got only skin deep it's it's a functional language so it's really different I use that but as if you're just to really a little look familiar to you I'm so not the treaty
Ferrari right so these guys are combined and now to get this code is not only fast but beautiful to look at on and then the next is this
MVC framework built on built with the letter a productive web framework does not compromise the maintainability made by this guy has scored and it has a lot of common frail
so it's NBC it's got arousal the generators used to it's got this package manager call hex such that things the best of both genome Bundler it's got this thing called makes such as like rate but it has a no called factor which is when talking about today which has a similar feature set Active Record queries migrations validation so a lot to say Phoenix is like the sort of at the next evolution of of what real should be you know some will see that that that metaphor holes partially been entirely on and it is fast like a
set so often an order of magnitude faster than than Ruby Rails yeah
of the issues metamaterials at last I had these aristocratic cities it's not really rails that slow it's more review this loss was not really his fault but will a list of use of the what you do
with that like a real-time communication system that would be a good example of that was very
interesting is if you build for instance a mobile app like this and and galaxy with all these prophecies in this like a traumatic clustering whatever when you send a message from 1 form to the other message the server-to-server but that's kind of built into the Erlang VM contrast that with France's action
cable which is this new feature in in real spy but what happens is the server 1st gives rise to red which has this pulse which goes to the server to register that server again but that's what happens in lecture it's it's it's the service cluster the real-time messages go between servers so fundamentally differ model ultimately factor model on the last lap at simple
text messages right so using this kind of technology you can build for instance of video chat system like a videoconferencing system and you could do an animal RPG really
easy for real-time data on the 1 hand picture there that's League of Legends which is or maybe was the most popular game in the world creates later in the directed systems are actually in a line on and you can do this really easy because member this is an easy web framework of built on top of telecom technologies of like rails with this more powerful subsystem
but but actually that so this is really what I'm talking about today I'm talking about Iran's are don't have much experience building time real time systems also talking about if a part of the next of the design of the object relational mapper and compare suggesting that that Active Record and this is my own
personal journey of throughout the years is the ones I developed against and is allowed to have the sharper Lawrence I recommend an active record a rather recently in an actor or even even stated that and it actually really looking at this list the 1 that stands out is sort of like the the the sort of the 1 is different because I've got this really kind of active record it has a pretty unique design I'm before I get a lawyer
and send it up with quickly about functional programming as I said elixirs a functional language and I described as a style program that avoids the mutable data I realize it's not that has the mean a whole lot right and I don't have time to get to a full description of exactly what functional programming is
but but if you're coming from probably the things that surprise you most of that elixir has no objects right so like Ruby has modules and classes elixir only has models but which also means there no methods right has functions but you can call but it doesn't have that like sort of like methods in objects like in in methods and data like in the same class encapsulation it's managed to reduce functional of the mutations so that means like in the you can have a hash and you can change with the values you can do that that's a if you have a guy like that Canada has to be a structure the abstract and you can't change 1 of the change of value you get back a new structure every time you do that operation and if you have a reference to the old 1 still there is mutable persistent data structures are so that's fundamentally different on the hood the way it works which means you have to write it in a different way you know this index similar but on the image of 1st and
Active Record of the Forty to act this is all going to be sort of a b you probably all seen this before the death of record of so it's a bit rehashing but I think it's important to sort of start the basics here just so that we get to act so it's a conversation that's about how we might you do things differ the what like what is the philosophy behind these designs the like top-level architecture designs of Active Record ecto differ really so I have a little demo and that's called hallway track as you can see in addition to being engineer I'm also a graphic designer and the result is the head on so you go to conference right we have multiple tracks like any of the database track from interacting track the hallway track is that a joke that's like the people you meet the whole so like it was your favorite part the conference owes the hallway track of so this little at like so people can make sort of self organizing the hallways and get together with like what they're interested in so you set up like a little mini and shows like you the people who were going to the Phoenix phonetic 1 its meeting in the lunchroom at 3 o'clock there and so on so what we've got here is that we've got conference right Israel's com which has which has a part which is like the finances has uses that summer database looks like this conference has many parties which has many uses and so like this sort of setting up
Active records of use of holographic scope for conference got Scopus for starting after we've got a scope for ending after so each of those little reusable bits of queries right that's kind of what is called out of reusable Bill queries of so that combine those together into the school for conference and time and I'm and I'm I'm chaining these together so here is active 1 of Active strong is what is really nice kind English-style syntax for conference that starting after not ending before and reuse real nicely that's sort of a nice feature for a for readability and effective record looks nice I'm done that have many users and get this scope for active users and then the user get this active scope so there's another little bits of and I call this the controller for conference and so standard and standard stuff you standard reals a man in my view I do this part is that each and for each party and parties that active users on display that list of parties and a display the users for each 1 and 2 bromo what happen only and that was not the practice so this is then this 1 problem if you don't have active wreckage probably run into this I and the reason does that is because why some of these parties and for each 1 calling on that active users of what is that that's an act regulation right we all know that the user to record is an act of regulation and that this is not the loaded so it's running query each time it does that so I fixed that and well OK am I spoke for parties topic in time I have to add this preloaded there that this kind of work on this on my my English looking my scopes at kind of editors like really kind of people thing in right so it's kind of polluted nice English looking syntax with the something a little more computer read but I could move it I guess I could take it out of the model input and the controller but realize you have done is I have a parties model right I had as scope active 1 users and not get the preload your controller I've got my query spread across 3 files stone is only 1 single query the spread out across the files now this does look pretty nice but that's a little that can be tough to track if you like looking for these queries in places but it's it's a trade off this trade off in it's hard to find a sequel year but it reads mice and reviving which is very convenient very fast here about now I can be of queries I 1 which is good on but what
happened here right up for like a higher-level why did this happen or a kind leaky abstractions of like equals a dog right I want dog nicer 1 like treating or the dog food taken outside right but really is sort of like this happen hundredweight program is sort of like this cat and wish is treated like a cat and cat food you know instead of a litter box but you know there's a star that anything you can forget that there's a dog so I can write good active records right the rails you can't forget about the sequel you know you have to know is there a constant no sequel any kind to do both so you can just use of Active Record naively right you have to remember that there's a cat and dog and that can you know it's in a leaky abstractions determined because you can just use the abstraction without also understanding how it works but which is why are active recognize nice like this looking syntax starts the kind of stuff that I did a little ugly we try to make the sequel right you know so I
concerning editorial programming Joe Armstrong said about objects you want the you got to real a holding a banana so running this query right we're getting data date is the banana will be guidance Active Record model which is an object is that that behaviour mixed in that best kind of a guerrilla in L 1 and and that can be difficult to reason about sometimes you start passing these models all around all over the place and you lost track of the queries and you got this thing is Barillo holding a banana you really want the banana and following the gorilla you know that
so it's interesting and so on as I said that the queries here and you could use a join instead make 1 query of the of forwards problem associated with that we fixed our articles wandered we but I think there's still performance problem here and is in my opinion what the select star because you know normally these tables you got a lot of stuff on these tables including time stamps for instance which are not displayed on the page but I'm pulling back anyway aren't even I'm pulling back a lot of stuff that I don't need
and at record kind encourages the sigh comes from seeing stars right see starts this indiscriminate use of law and that's what's always select star and we can we can fix
this idea you know by adding at that select that you get that the Active Record stuff but the streams that you have to use the tables and all that stuff it's easy to fix but it's also you forget about your immune and become a promise you know a big rails proteases to select sorry where people don't have the time to be selected if you realize also on the part of sculptures books was be reusable launch but once you start reusing scopes of the go summary UCT it might have different columns selected so you reuse is open like from 1 model but you tacking on different select states news in other parts and also and also becomes real hard to keep track of what what's query what about query spread out across so many files the so just just sum it up
lecture the rails at record philosophy here is that country was English over sequel right we have expected away the sequel which is good for readability good English Rails ActiveRecord reads really beautifully so we got objects not data we got guerrillas bananas on domain models over relational model so domain model like it just means that just means that without a class that represent something life so I had a party like a part is the real thing that uses a real thing conferences the real thing and and our our classes match the classes maps like real world entities things that we have to think about real life receives the relational model which is tables which is specific to database and more computer-aided thing with that's a real world thing but rails they don't productivity you but you if you've been the real community like for about a 15 minute block I allows you to develop things really really really fast which is affected you need them at the great feature Austin is top of scalability because it's so easy to do the simplest ones and forget because it's so easy to forget about the select the fewer the performance with things that I'll talk about later account favors developers over that's where we say that well because a lot of times like you that absolute deviation looking at the query log and you know might allow the the last nite is the slowest query that ran you know this type where that query and the developers like 0 well it's the split across multiple solver for different models you know like watching together you know it makes a hard find the slow query right finer query is that of the track down sometimes but an
and sequel and rails like Ali really friends I had another tough enemies for that reason being just because of just because it is hard like think it's equal amounts thinking rails you know the so so this is what I
see like at scale when you get huge Active Record of application log using examples ones seeing stars problem AP level constraints and by those of things like unique constraints of the model which is this we're gonna in that picture I think that it's not the because race conditions transaction management I see you know with the way back to recognize that take a model like that's a kind everywhere you want you know it in people forget transactions a lot it's lazy right you you take the square together in the pass something often can pass all the way to the view before you start leaping fewer before actually runs the queries of odd keep track of where the actual queries run were job achieving force
would predicting programs himself cells would include the hanging rope in the welcome kids as you change home and of Active Record to it allows you to get things done
fast and but to its credit great was like readable DSLs conceptually simple it's comfortable for beginners you know standard cannot really use the sequel it's really easy to get started so that is a big thumbs up you know that's that that's the of an overall it's
say Active record this is my opinion kind of but convenience over explicit as a performance so it's real fast easy convenient to create cash change together about explicitness that like his is actually happening here that's equal this running is lost a little bit on and it's easy to make performance mistakes explicitness
violating thinking that's over the data be saying this a lot today so look this work and so let's
move on economic so this is a
else's Chris core and and we entices relative a webpage that you come in the whole so they they are on the same thing and they're they're very similar if you do like if it is isolated from the prior that kind of thing they are very similar but then at the end ECML has repeated has like superpower real-time communications of doing that then the very different costs but but the way that it works is it's like it's a little different so there's not just a simple model was among the the final bidders landmark elections for things repost you might change that and query so already it's actually a little more there's more to think of right now so here for instance is the person is the schema right so in the model while for parties that have filed the a class so 1st of all you to define the schema we know that active record you don't define the your predefined fields right you that's all dynamic in in an inactive you actually have to define them and we disease that has many belongs to the same kind of way but it's explicit right so there's that word explicit because were telling actor what fields we have you know which allows us to distance and it turns out to be convenient slow more boilerplate return that the convenience no user controller so that 1st lines kind weird so over in that section of the connection that has the like the request response responses stuff they pass the that's not global alright that they're doing that explicitness that little funky thing in the brackets brackets in the 1st line there that's it like it's a pattern-matching Kennedy structuring of getting the Conference ID out of the request cash but then we have report out also impose this module that represents our database were passing party that 4 conference but which is what gives a query so it's kind of 2 pieces so so that rebuild the represents a database and the were part of for conference in terms of query and so then they get run and then were explicitly calling in next HTML and passing the parties so that's gonna like Rails but a little more explicit on the back and 2 parts to our queries that 1 of the repo and we get this would constitute query if you don't like
the design patterns and stuff like this so this is not the repository patterns manpower find this is what is in his book here on versus the Active Record pattern logic wraps eroded database table of you so Active Record pattern like the original definition that describes like the instance methods on Active Record but active record the real thing is actually sort of like a lot of like but the class methods are more like repository where the instance methods more like Active record in the hands of the Annapolis things mixed in there so well Active record is sort of this like meta-pattern that grown over time to encompass more and more of the patterns in an actor were little more fine I actually I was lucky enough to be on on the Ruby Rhod podcast and agreement on there and that we were talking about this and some said hey will Active Record a repository of indefinably got totally wrong he was actually red that's the opposite of that so this is so this year this is for you I would say that this right on but from what's also
interesting about Phoenix is that what has the same method and and so you can just like query something change of field had saved like stated that many get to writing in a 2nd but it doesn't turn objects which instructs and so it's returning bananas not guerrillas is just returning data in this sort of structure due to run doesn't have methods half of it the and then it's immutable the stocks going back immutable you can't like change the most of their their their their which a means you have to like designing programs like different differently
and interesting marriages trucks not objects right which means it's not an object-relational mapper I'm a little bit there's the said in quite figure that out after it proposes thought the title was failed to oral and so was not actually know where and what's and that's OK then this is a function of OK so here in the model I need
to put together a query right so here's my query for conference passing a conference idea that discourse text from pardon parties on getting a little there were party that conference I B and then also check out check up the select select part that mean high after time party that in time with with chemicals if you get your mind with one thing is really looks lexical isn't it selects on the bottom of the top this literacy clusters it's almost like it's almost like sequel written in elixir which is like can hold on the mass the let's syntax is really nice much prettier than the rails 1 and if you get in the habit of always putting that in like you write query it's it's you not to forget it is easily and and Henderson starts problem right of preload like users who can just like that and the police equal as looking at would grew by but this is kind of cool and we that group by less user ID sorry but then select party that IT and counted using that idea that that was kind of cool a real sequel looking from mass realize they anyone won't know where they got the syntax from actually this idea of this kind of like sequel indexes that code and education shocked at that and see what is is a rare case of like an open-source world taking a cool idea from Microsoft that of the other way around instead of ice were so yeah
so whose like yeah minimize most this
will do in there was the matter I think you know the common so then they take
all these queries and sort of together all the same file I realized I was the 1 that just showed you but you know there they are and it's kind like but a single queries now you can write this in a way that can composers and reuse them is married right because they they often have the same where conditions In Active Record you would make a scoping you reuse it'd be more dry here were repeating more stuff and this is a little bit more of my own opinion then something forced on you by by actor where there is some merit to that right because you know it's really easy to track down those queries is really easy to find that you know when you look you query log in 0 here is the 1 that blocked stable last nite it's really go back and look at you know it's really easy to imagine this 2 to go from October to speak will and back again without getting lost in all these model training of these fields together and
so also a selective and if I ran this in the case of counsel light rail so if I run this in the Council I get parties again other parties right mind get the first one noticed this that 1st the parties that were functions that methods right it's not parties that 1st list the 1st parties that the function and do 1st part that users like it is association not loaded In an active record this would be an act of regulation and it would actually loaded when you actually run another query you can't do that in fact you can do it that's a no object that that it for 1 thing this is a so it can just load the new stuff and can run another query mode stuff into that object because immunologic anyway but the solvent is 1 of you can do it's impossible right and plus 1 in echo now that means you have to sort of go back to the model the think ahead and write people back down there but you know which is a little more boilerplate the littlest right there might be a good thing and it's eager to it's not lazy so all the query is actually done in the model layer you know there's not that sort of laziness we're passing this active records the novel into the view adopted the view helper and then like running in the loop and then firing off a query you know as seen bigrams projects was like OK analytic creates this this this request runs 0 my gosh there's 1 of the model 1 control controller 1 few and 1 of the helper rule boy this sort of forces and all the at the model area was to think ahead of all your loads stuff it's not like when we find you answer now onto writing
right out when you right whether that's enough data insert but we've got these things electrical changesets sets also user a change that like for creating new users right I know that I define this change the meaning and it's can take the name the e-mail address an age of cool so that might be like a form that you know your body your assigned form for instance
um OK and and this is what it looks like that from the little era new that's called a pipeline operator it's kind of like Linux type it's in little thing but but it is 1st of all there's actually like explicitly casting right rails automatically cast at echo explicitly cast but it's got required national programmes but we explicitly do the validation is on the right here on this method and then we collect all the constraint on e-mail that's that's 1 things that like assigned form if you want 1 like but they say just update someone's e-mail we have to make another change that we don't share the change that so of the top 1 is an insert operation the 2nd 1 is an update operation to completely separate changed so contrast that for instance with an active model an accurate model of union kind like the format like set a property in hit that saveset couple properties of it that say but you know you can't do that here it's like you have to explicitly define each write operation this was an update it looks like this has these validations this was inserted looks like this has these validations of which is more explicit there's that word again writing the explicit and also you can allow this to have separate validation so you don't end up with allelic convoluted statements on your validations and stuff I'm a little more boilerplate to solve this up a little more work but increased explicitness increased flexibility in having multiple different sets of validations and things like that and so definitely a different approach I'm an a classical the multi were on multi is basically a bunch of upstate inserts updates so here we've got 3 about a topic and serve a party in certain a big conference and many cataract these in this transaction and in any and you can you can get the you pattern that unresolved OK air and handle the result is a hole right on this is kind of cool because if you get if you get the habit of using these like every time a pulsed I'm gonna do my rights in a in a multi then you never forget about that in that transaction very common mistake I see in big Rails apps is saves a scattered all over the place it's real hard to correct them all 1 transaction people forget to rapidly the transaction this can help you with that and it's a little cleaner to in in in rails adapted do like how its topic that party that's a then conference that saved you can't create a small thing you say that you don't OK yeah so you think thinking transactions cost of models and domain models right in thinking in terms of this a single database transactions the so yes separate validation is a little more explicit their security also that we have to deal with we don't worry about the problem of strong Koran uh you know there's less text passing around so less opportunity for sequel injection got the queries and that's really um an and again explicitness functional programming is about making the complex part of a program explicitly in most that's the complex part you know is is like database query and higher sort of translating from a user input like shaping the data and getting into the program or high taking that relational data querying it mixing and matching turning around receiving in passing out and you of selects makes that a little more explicit Right little easier to track and figure what's going on at a slightly lower level at not high as high of an abstraction level
so also if you're a big terms of echo follows the command query responsibility segregation principle which is that read and update use 2 different models and we saw that uh the queries I had had joined them right and the update of these explicit change that's not like 1 model for reading and writing it's a separate thing a query for reading the change that for writing so that's conceptually interesting but it's also there's also kind of like that right at the database level of kind of a really compelling reason to do that I think about query you know in anything nontrivial queries can have joined query most queries like any in big complex that have a lot of times and when you get that you get back a certain set columns that does not match was actually on the table you going that columns from multiple tables so you creates have a certain set of columns based OR-joins they have but you right so have joined due the rights always right only to single people time insert and insert only inserts in a single table and update only updates a single table but you really from multiple tables yet for instance in rails their share the same model with that even though the pulling back different difference sets of properties the share the same model we have that responsibility segregation here also so the ring up using totally different paradigms totally different of sets of sets of columns totally different now you don't think on
self from just again like some of on rails as objects Phoenix's data right it's gorillas the bananas verses bananas of real methods whereas the basis functions and then the real stuff is mutable you can pull back and object change a property pass around whatever you want with it features immutable was you query that data you got that struck doesn't change a sequel of all of our I guess the alarm and level of Phoenix actor alright if sequel style syntax over English-style syntax looks more like sequel feels more like a relational database of overseeing stars I will say it solves the problem it definitely doesn't but I feel like with that like cool select syntax and the way it kind of you know it looks like seek William the query I feel like it makes a little easier remember that Justice indiscriminately selects fire time which in I scale it may not matter but at the scale when you got you know that dozens of web servers firing on a single database server database server becomes a bottleneck and the select stars from killer of rails lazy actor was eager all those queries cover fire when you expect them to you know we're not passing these lazy objects that not to the views with the sequel and it's fired from the view of braille's dispersed query gets spread around across fields across multiple files on a total of it is all model there so what's the downside of
this well is more boilerplate with a set of all those change said that if to define our scheme our to create those Maltese and stuff there's typing involved know more code to test that that stuff up a little bit more complex of a mental model of because you know the world of Active Record we've got to me now so the user that's a real life thing that is a class you know nicely connection there to think about and where is this is what the blacks that command query responsibilities segregation means that that think about this differently when I read that I do when I write on less driving that will repeated code because reusing at last a little less readable that tells what you used to you know if you want code looks like English is that is used to that you like the code and probably will be less readable if you use a sequel in doing things this you know and and right query is then you know you may have the opposite experience it may be a little more readable psychedelic robot talk in
Austin like users and conferences we've got she's sets of schemas and queries and for that we were actual if you use like talking in computer terms I like talking it's equal instance my wife's like red we do the dishes like select issues from saying is certain to dishwashers saying relic of the ICSI could see goes like you're so weird but then on right so
we get some I guess the trade-off here so the other thing is that like it's explicitness there's that where right it's explicit will reducing performance that there was a better performance and the few right you're pitfalls that could fall into the set to be mindful of course to the fewer people to volunteer for performance will you can't to impose ones you know of over convenience is not quite as fast to develop I would want to the 15 minute block to the next economic do there's you know I'm just the difference at a trade off that's really what this is about is that neither of them a better or worse this is a different set of trade off to get with these differences are
I also part of the act of philosophy is this sort of like like the database to what good at you know it has constraints by default you migration set of foreign key with references you get constraint by default you know but it is not polymorphic associations like rails that if you come from the world sequel like I did before going to aggregate this so year I'm aware that it came from but it does not applicable unique validation is you know like selected it if you want a unique values and put it on the database and it doesn't have that like that like Application level 1 where you can do unique validation rails that 1 is weird it runs a certain select query 1st before doing the answer it's not safe arrays conditions to can't do that on as can cover ICA active and ways the downside of lying on a database of error messages uglier but the ways around that a few Member the change in the change that I had to find the constraint e-mail when he gets like at a unique are new constraint failure it's also which was the newcomer always e-mail the generator I see a message for you so if a clever and and testing story you know I I I don't have the slides you know about about the testing code but but believe me the testing and that being easier when you got this more explicit model your passengers stayed around between your functions on you tend to do less walking because your business logic is not sort of like mixed into the model you're not sort of like blending together business logic select its financial acumen of calculate interest rate or something that's not in the model it's a function and you taking the data related to your query to collect data passing it into that function giving a result that that function because the unit test it's a pure function that's 1 of the benefits of functional programming such as so the way you're forced into this paradigm slightly stricter paradigm with that don't you want with more pure functions on the last day of march which is really nice also because as runs underlined be on the test runs were massively concurrently fire test suites starts up like 30 time like in parallel which is really a lot other doesn't cool cool more features like soldiers on the that's the thing about stress we could say J. JASigning in PostgreSQL query against its that support for that really slick way and they status among would adapter coming to stay cool because a tic-tac-toe like supplier role adaptive for to someone like some of our way to write an adapted that his forget have API so it's it's echo but if the reading from a database we get have API you get that same sequel type create tool if you wanted like swap out a database implementation with an API division vise versa you get that same year the changing year Apple code them all as so but you know in in
in the end this realized that that lot our choice that you get trade each 1 1 1 size could also have an obvious application is completely unbiased right my eyes see these spring which is now home I like away but that may not be for you and that's OK if you value you know that I can be used that against other than than uh the Soviet and also that you have a choice you know if you start with Ruby on you know there's another
optical sequel which has some similarities record with also a different set of tradeoffs you know it doesn't have emphasis on data has the inverse 1 thing you know so it's that you can use lactase out you realize that Israel and the choice but trailblazers
another 1 which can actually uses active record but it's got like application outrun architecture on top of that could be something that looks a lot like it does change that's so you know again different tradeoffs you will use this but you can also use active record in a
way that looks more like a you know some of these other design patterns and more like regular if you want to maybe by a service object or something or you may just use Active Record as it is just realized that you just because using real doesn't forced into the African way necessarily also
few resources here couple gray articles and despite and podcast holes in the some that's really good if you're just in more immutability in those those mutable data structures of process data structures this is a change in intangible at the top really got which explains not wider how those things work on and you just the more might services services and how you can like change the way we use active record I have to give a talk there are many in a barber which in this 1 to that 1 for you and
if you're more interested in Phoenix that take Friday brain fidelity the sealed that yeah is giving a talk just on Phoenix I haven't seen it yet and then it's pretty good suggest that Friday of my my
name is brenda Ronnie I tweeted at ready Araneae following a value back and really Twitter addict and connected me on LinkedIn and get a love and all of these very much about advocacy a vibrant pro-poor proper makes construction management software is readily still
work this is the view from office you can wear large William program and is when the course is the work that i is the cost and worked and all of those signals Missouri's in a barber just work there were hired like crazy rails architects of JavaScript front end of which is reacted that's pretty much every cool thing you could think of and I'd love to talk to you about that is the also about 15 of us here mostly were improper gears of them without any of us
finally calling track the is life but if you would like to use their right to get together with your fellow programmers here instead of a little Holly checking it's really wrong will take but it doesn't work and you do it with let robust enough time you will at the 1st time of the creation of a decided not so any questions 0 you mean
the Dublin Core Yellowstone exist an act of piety all that's to call that the metal and no I don't think they do if they did I didn't go looking for them on but you there are other ways to solve the problem right so you might like a service layer or do controller where you kind of want everything in that in that much of the multi you and doing all the right and 1 multi you know you just use the controller service live outputs up a multi-word all once but will figure out a few and that back
Programmiersprache
Datenparallelität
Formale Sprache
Lineares Funktional
Twitter <Softwareplattform>
Framework <Informatik>
Computeranimation
Datensatz
Datensatz
Benutzerbeteiligung
Datenparallelität
Objektrelationale Abbildung
Funktionale Programmierung
Normalvektor
Stab
Erlang-Verteilung
Datenparallelität
Formale Sprache
Gruppenoperation
Hochverfügbarkeit
Physikalisches System
Gerade
Quick-Sort
Computeranimation
Internetworking
Systemprogrammierung
Skalierbarkeit
Echtzeitsystem
Prozess <Informatik>
Armstrong, Joe
Erlang-Verteilung
Ganze Funktion
Gerade
Telekommunikation
Virtuelle Maschine
Server
Echtzeitsystem
Prozess <Informatik>
Quader
Server
Systemaufruf
Schreiben <Datenverarbeitung>
Coprozessor
Computeranimation
Demo <Programm>
Softwarewartung
Benutzerbeteiligung
Maschinencode
Framework <Informatik>
Funktionale Programmierung
TLS
Ähnlichkeitsgeometrie
Biprodukt
Framework <Informatik>
Quick-Sort
Computeranimation
Retrievalsprache
Sechsecknetz
Validität
Systemaufruf
Migration <Informatik>
Bitrate
Sichtenkonzept
Teilbarkeit
Computeranimation
Datensatz
Datensatz
Generator <Informatik>
Datenmanagement
Migration <Informatik>
Größenordnung
Generator <Informatik>
App <Programm>
Einfügungsdämpfung
Kommunikationssystem
Gruppenoperation
Mailing-Liste
Computeranimation
Bildschirmmaske
Echtzeitsystem
Taylor-Reihe
Kontrast <Statistik>
Cluster <Rechnernetz>
Message-Passing
Instantiierung
Listenprogrammgenerator
Physikalisches System
Teilbarkeit
Computeranimation
Videokonferenz
Gruppenoperation
Informationsmodellierung
Dienst <Informatik>
Puls <Technik>
Reelle Zahl
Server
Message-Passing
Instantiierung
Datensatz
Telekommunikation
Datensatz
Benutzerbeteiligung
Echtzeitsystem
Spieltheorie
Gebäude <Mathematik>
Mereologie
Objektrelationale Abbildung
Physikalisches System
Framework <Informatik>
Computeranimation
Eindeutigkeit
Mailing-Liste
Lineares Funktional
Optimierung
Quick-Sort
Computeranimation
Eins
Arithmetisches Mittel
Datensatz
Deskriptive Statistik
Datensatz
Framework <Informatik>
Einheit <Mathematik>
Rechter Winkel
Funktionale Programmierung
Optimierung
Funktionale Programmiersprache
Objektrelationale Abbildung
Objekt <Kategorie>
Resultante
Bit
Umsetzung <Informatik>
Demo <Programm>
Weg <Topologie>
Klasse <Mathematik>
Mathematisierung
Geheimnisprinzip
Kommunikationsdesign
Computeranimation
Informationsmodellierung
Datensatz
Weg <Topologie>
Hash-Algorithmus
COM
Datenstruktur
Bildgebendes Verfahren
Schreib-Lese-Kopf
Lineares Funktional
Addition
Datenhaltung
Modul
Quick-Sort
Datensatz
Objekt <Kategorie>
Verbandstheorie
Rechter Winkel
Mereologie
Computerarchitektur
Sichtbarkeitsverfahren
Bit
Quader
Datensichtgerät
Fortsetzung <Mathematik>
Computer
Abstraktionsebene
Computeranimation
Informationsmodellierung
Datensatz
Reelle Zahl
Optimierung
Regulator <Mathematik>
Metropolitan area network
Soundverarbeitung
Sichtenkonzept
Abstraktionsebene
Indexberechnung
Abfrage
Mailing-Liste
Elektronische Publikation
Ein-Ausgabe
Quick-Sort
Texteditor
Rechter Winkel
Mereologie
Gamecontroller
Computerunterstützte Übersetzung
Abfrage
Computeranimation
Homepage
Objekt <Kategorie>
Informationsmodellierung
Weg <Topologie>
Rechter Winkel
Einheit <Mathematik>
Armstrong, Joe
Zeitstempel
Optimierung
Tabelle <Informatik>
Instantiierung
Subtraktion
Abfrage
Elektronische Publikation
Gesetz <Physik>
Computeranimation
Streaming <Kommunikationstechnik>
Datensatz
Weg <Topologie>
Informationsmodellierung
Trennschärfe <Statistik>
Mereologie
Aggregatzustand
Tabelle <Informatik>
Objekt <Kategorie>
Relationale Datenbank
Domain <Netzwerk>
Subtraktion
Hyperbelverfahren
Skalierbarkeit
Klasse <Mathematik>
Fortsetzung <Mathematik>
Login
Computeranimation
Eins
Datensatz
Weg <Topologie>
Multiplikation
Informationsmodellierung
Domain-Name
Skalierbarkeit
Reelle Zahl
Datentyp
Softwareentwickler
Videospiel
Softwareentwickler
Datenhaltung
Güte der Anpassung
Relativitätstheorie
Datenmodell
Abfrage
p-Block
Biprodukt
Mapping <Computergraphik>
Objekt <Kategorie>
Differenzkern
Rechter Winkel
Mereologie
Heegaard-Zerlegung
Standardabweichung
Tabelle <Informatik>
Nebenbedingung
Nebenbedingung
Zellularer Automat
Datenmanagement
Kartesische Koordinaten
Computeranimation
Eins
Übergang
Informationsmodellierung
Datensatz
Weg <Topologie>
Datenmanagement
Maßstab
Prozess <Informatik>
Optimierung
Transaktionsverwaltung
Zentrische Streckung
Sichtenkonzept
Eindeutigkeit
Applet
Abfrage
Übergang
Datensatz
Transaktionsverwaltung
Forcing
Rechter Winkel
Konditionszahl
Brennen <Datenverarbeitung>
Message-Passing
Datensatz
Thumbnail
Mathematisierung
Fortsetzung <Mathematik>
Computeranimation
Retrievalsprache
Telekommunikation
Weg <Topologie>
Klasse <Mathematik>
Web-Seite
Term
Computeranimation
Zeitstempel
Repository <Informatik>
Datensatz
Informationsmodellierung
Poisson-Klammer
Gamecontroller
Mustervergleich
Endogene Variable
Datenstruktur
Gerade
Modul
Einfach zusammenhängender Raum
Datenhaltung
Datenmodell
Volumenvisualisierung
Indexberechnung
Abfrage
Modul
Echtzeitsystem
Datenfeld
Framework <Informatik>
Einheit <Mathematik>
Rechter Winkel
Mereologie
Gamecontroller
Speicherabzug
Garbentheorie
Textbaustein
Repository <Informatik>
Verkehrsinformation
Instantiierung
Objekt <Kategorie>
Schnittstelle
Domain <Netzwerk>
Mathematische Logik
Dokumentenserver
Klasse <Mathematik>
Mathematisierung
Extrempunkt
Mathematische Logik
Computeranimation
Datenhaltung
Datensatz
Mustersprache
Datenstruktur
Dokumentenserver
Datenhaltung
Entwurfsmuster
Abfrage
Sichtenkonzept
Quick-Sort
Arithmetisches Mittel
Objekt <Kategorie>
Datensatz
Datenfeld
Rechter Winkel
Tabelle <Informatik>
Instantiierung
Bit
Gruppenkeim
Abfrage
Ruhmasse
Fortsetzung <Mathematik>
Computeranimation
Objekt <Kategorie>
Informationsmodellierung
Differenzkern
Rechter Winkel
Automatische Indexierung
Mereologie
Objektrelationale Abbildung
Minimum
Cluster <Rechnernetz>
Figurierte Zahl
Objektrelationale Abbildung
Datensatz
Bit
Informationsmodellierung
Mereologie
Wellenpaket
Datenfeld
Rechter Winkel
Konditionszahl
Schlussfolgern
Abfrage
Elektronische Publikation
Quick-Sort
Computeranimation
Mathematisierung
Adressraum
Computeranimation
Loop
Informationsmodellierung
Datensatz
Bildschirmmaske
Ganze Zahl
Regulator <Mathematik>
Assoziativgesetz
ATM
Lineares Funktional
Sichtenkonzept
Güte der Anpassung
Abfrage
Schlussregel
Mailing-Liste
Quick-Sort
Spannweite <Stochastik>
Arithmetisches Mittel
Assoziativgesetz
Menge
Flächeninhalt
Forcing
Rechter Winkel
Last
Mereologie
Gamecontroller
Projektive Ebene
Körpertheorie
Textbaustein
Instantiierung
Resultante
Retrievalsprache
Programmiergerät
Einfügungsdämpfung
Mereologie
Gemeinsamer Speicher
Mengensystem
Fortsetzung <Mathematik>
Komplex <Algebra>
Steuerwerk
Computeranimation
Übergang
Mustersprache
Computersicherheit
Programmierparadigma
Kontrast <Statistik>
E-Mail
Befehl <Informatik>
Kategorie <Mathematik>
Computersicherheit
Datenhaltung
Abfrage
Ein-Ausgabe
Optimierung
Transaktionsverwaltung
Menge
Rechter Winkel
Lesen <Datenverarbeitung>
Dateiformat
Instantiierung
Tabelle <Informatik>
Lesen <Datenverarbeitung>
Nebenbedingung
Subtraktion
Multiplikation
Mathematisierung
Einmaleins
Ablöseblase
E-Mail
Term
Bildschirmmaske
Informationsmodellierung
Domain-Name
Multiplikation
Unterring
Datentyp
Endogene Variable
Optimierung
Transaktionsverwaltung
Validität
Einfache Genauigkeit
Lineares Funktional
Menge
Quick-Sort
Auflösungsvermögen
Körper <Physik>
Mereologie
Injektivität
Wort <Informatik>
Modelltheorie
Textbaustein
Funktionale Programmiersprache
Objekt <Kategorie>
Maschinencode
Bit
Total <Mathematik>
Klasse <Mathematik>
Mathematisierung
Fortsetzung <Mathematik>
Computeranimation
Übergang
Benutzerbeteiligung
Multiplikation
Informationsmodellierung
Datensatz
Reelle Zahl
Trennschärfe <Statistik>
Endogene Variable
Einfach zusammenhängender Raum
Softwaretest
Videospiel
Lineares Funktional
Zentrische Streckung
Relationale Datenbank
Sichtenkonzept
Kategorie <Mathematik>
Textbaustein
Datenhaltung
Datenmodell
Abfrage
Einfache Genauigkeit
Nummerung
Elektronische Publikation
Roboter
Objekt <Kategorie>
Datenfeld
Funktion <Mathematik>
Menge
Rechter Winkel
Basisvektor
Server
Textbaustein
Subtraktion
Menge
Differenzkern
Rechter Winkel
Trennschärfe <Statistik>
Abfrage
p-Block
Computer
Term
Computeranimation
Eins
Instantiierung
Resultante
Quelle <Physik>
Komponententest
Modifikation <Mathematik>
Nebenbedingung
Fortsetzung <Mathematik>
Kartesische Koordinaten
Computeranimation
Übergang
Softwaretest
Programmierparadigma
Mixed Reality
Default
E-Mail
Auswahlaxiom
Array <Informatik>
Softwaretest
Suite <Programmpaket>
Lineares Funktional
Dean-Zahl
Datenhaltung
Güte der Anpassung
Abfrage
Bitrate
Kontextbezogenes System
Rechenschieber
Hierarchische Struktur
Funktion <Mathematik>
Menge
Einheit <Mathematik>
Konditionszahl
Datenparallelität
Anpassung <Mathematik>
Normalspannung
Schlüsselverwaltung
Message-Passing
Lesen <Datenverarbeitung>
Fehlermeldung
Nebenbedingung
Maschinencode
Mathematisierung
Soundverarbeitung
Implementierung
Mathematische Logik
Division
Überlagerung <Mathematik>
Datenhaltung
Informationsmodellierung
Migration <Informatik>
Datentyp
Assoziativgesetz
Eindeutigkeit
Default
Validität
Mereologie
Körpertheorie
Funktionale Programmiersprache
Objekt <Kategorie>
Dienst <Informatik>
Datensatz
Subtraktion
Architektur <Informatik>
Menge
Gamecontroller
Inverse
Entwurfsmuster
Kartesische Koordinaten
Fortsetzung <Mathematik>
Ähnlichkeitsgeometrie
Computerarchitektur
Auswahlaxiom
Computeranimation
Dienst <Informatik>
Datensatz
Prozess <Physik>
Datenstruktur
Datenstruktur
Computeranimation
Fraktal
Sichtenkonzept
Twitter <Softwareplattform>
Software
Debugging
Optimierung
Eigentliche Abbildung
Computeranimation
Web log
Office-Paket
Multiplikation
Dienst <Informatik>
Weg <Topologie>
Programmiergerät
Rechter Winkel
Weg <Topologie>
Gamecontroller
Computeranimation
Funktion <Mathematik>

Metadaten

Formale Metadaten

Titel ActiveRecord vs. Ecto: A Tale of Two ORMs
Serientitel RailsConf 2016
Teil 57
Anzahl der Teile 89
Autor Urani, Brad
Lizenz CC-Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen und nicht-kommerziellen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen und das Werk bzw. diesen Inhalt auch in veränderter Form nur unter den Bedingungen dieser Lizenz weitergeben.
DOI 10.5446/31496
Herausgeber Confreaks, LLC
Erscheinungsjahr 2016
Sprache Englisch

Inhaltliche Metadaten

Fachgebiet Informatik
Abstract They bridge your application and your database. They're object-relational mappers, and no two are alike. Join us as we compare ActiveRecord from Rails with Ecto from Phoenix, a web framework for Elixir. Comparing the same app implemented in both, we'll see why even with two different web frameworks in two different programming languages, it's the differing ORM designs that most affect the result. This tale of compromises and tradeoffs, where no abstraction is perfect, will teach you how to pick the right ORM for your next project, and how to make the best of the one you already use.

Ähnliche Filme

Loading...