But you forgot to mention NPM.
But there are libraries that implement that on top of Mongo.
Seriously! Thatās pretty strong numbers there. Why do we see so many posts like āwhy did Meteor failā, or this very thread??? Like, really?
Why is it not more popular?
Hmmmm, maybe because it is the most popular already? Just go code, and use what you like.
DDP can be rate limited. Thereās a ddp-rate-limiter package, plus Iāve seen some techniques around here somewhere.
Sure, but if ātransactionsā are an important requirement within your application (f.e. financial app), you canāt rely on libraries like that. The database has to take care about the relationship between all docs. You can also remove all unique indexes and check in your application if a document with the same _id already exists. This may work most of the time, but there is also a higher chance that duplicate documents will be added.
All this stuff is just software. The ātransactionsā you speak of are just software, even if not implemented in JavaScript, but they are nonetheless as susceptible to programmer bugs as anything else written in JavaScript. And just because itās JavaScript doesnāt mean it canāt work. Make it work with no duplicates, write good unit tests so it is unlikely to break, and benefit.
Iām not talking just about Javascript, itās never a good idea to put these validation logic (only) in a application. Itās the job of the relational database too guarantee referential integrity and keep all indexes correct. I donāt think that any financial application programmer would say āGreat, letās write this logic in our application and forget about all those features in the databaseā.
Really the only difference between relational stuff in an SQL database and a relational library on top of Mongo is that SQL has years and years behind it. Itās only a matter of time before these newer DBās have solid built in relational stuff or community libraries built on top of these DBs that are just as solid.
Itās just code, you donāt have to stick it in your app, you can stick it in an NPM repo and encourage contribution from the community, and make it a re-usable library.
The requirement of having transactions in an app doesnāt determine if meteor is good or not. Meteor is quite great at what it does, but it may not have absolutely everything that you need.
Thatās what tools are about: picking the right one for your requirements. :}
Yeah, but I only said that the missing relational thing could be a reason why some people donāt choose Meteor (because the thread is about such reasons), I didnāt say that you should not use it because it lacks of this feature. We are working great with Mongo + Meteor and compared to our old LAMP stack we can even provide more features and also have a better scaling.
Agreed with Joe. Before SQL databases became the norm, teams had to implement transaction logic on their own in the application layer. The healthcare industry has been implementing application level transaction logging in our HIPAA audit logs for decades. Itās perfectly manageable.
Itās like complaining about driving a manual transmission instead of an automatic. Seems incomprehensible and unnecessary until you learn a few basic skills, then itās trivial and itās like āwhy was it ever a big deal?āā¦ until you drive 500,000 miles, and literally get fatigued doing the shifting. Rolling your own transaction checks is just a matter of a lookup and a callback.
I didnāt forget about NPM. When I talk with other Vue developers about Meteor, they donāt get satisfied with āMeteor has also NPMā. They want to hear āI can do everything with just NPM without using Atmosphereā, which will take a long time for a full transition to take (especially that currently thereās no agreement yet on how to make this transition).
As people have already mentioned, there were issues in the past that have since been addressed. Things were moving very fast in the JavaScript / Node world and you canāt really fault MDG for not being able to perfectly predict how all that would play out. Everything considered, right now Meteor is in a pretty great place, and I mean that objectively. It fully supports NPM, React works extremely well with it and code splitting is on the way. Those are just the highlights.
Most people still have an issue with two things:
- MongoDB lock in.
- Realtime everything is very resource intensive at scale.
Apollo addresses both of those issues so weāll just have to wait and see where things are this time next year. Personally, Iām very happy with my decision to go with Meteor. Iāll be moving from pub/sub over to Apollo / GraphQL in the coming months to get away from everything being real time. After that, I donāt think Iāll have anything to complain about.
Iām one of those guys that doesnāt understand the āscaling issuesā of Meteor. AFAIK, the reactive: false
property within publications was added years ago, and if you still have issues with large publications, itās very easy to throw the db call into a Meteor method that doesnāt have to deal with the pub/sub scaling issues. Essentially, this transforms the db call to the backend so it works just like any server-side language, but pipes the response over DDP instead of REST. This has much faster responses than the request->response flow of any other server side language.
One thing we do is to transform sub documents, which donāt need to be reactive, straight into the published doc. So we donāt need any method calls or an additional publish to connect relational data. Iām also wondering about scaring scaling issues. Weāre running a Meteor app with ~1.5k concurrent users on a single VPS (+ one for the database) and also using individual subscriptions for each visitor. So only performance issues we had so far were missing/wrong indexes in the database.
To be fair, deployment is never easy. Meteor helps though, because it takes care of all building.
This is exactly how we are doing it in our team - we decided from the start to not use pub/sub at all, and it works great, and scaling should be trivial (we havenāt tried yet).
Well, Iām agree with @andrewleschinsky - deployments is never easy. And MUP isnāt a silver bullet too.
Here is something to start with: Gist deploy.sh
reactive: false
wont help with scaling because itās a client only property, see https://docs.meteor.com/api/collections.html#Mongo-Collection-find
Iāll probably just repeat thingsā¦ But for me personally:
- No official Vue.js support. Why still ignore it? It now has more Github stars than Angular or Meteor for that matter.
- MongoDB - no thanks, I need my relations. I guess Iāll have to wait and evaluate Apollo.
- DPP is for me the USP, but few apps will need reactivity as a core feature. Most reactivity use cases for my projects are limited to notifications.
Alternatives havenāt been standing still. Iāve always used Rails, and now with 5.1 it finally officially supports npms, Webpack and Vue.js and reactivity through ActionCable. Which means 3 less reasons to use Meteor (or actually 2, since Meteor doesnāt officially support Vue unlike Rails).
Meteor development seems slow, because of all the focus on Apollo. I hope when Meteor 2.0 arrives, it kicks some serious arse! Thing I love about Meteor: Javascript everywhere, a cohesive stack instead of cobbled together NPM modules and a full test suite is finally getting attention.
Thatās a great solution, thanks for the suggestion!