MongoDB has filed to go public
techcrunch.com
techcrunch.com
2015 revenue: $41mm net loss: $77mm
2016 revenue: $65mm net loss: $73mm
2017 revenue: $101mm net loss: $87mmSeriously I'm flabbergasted.
$29.9M on Cost of Revenue (hosting fees + the people who run things + support/consultants)
$78.6M on Sales & Marketing (sales people)
$51.7M on Research & Development (programmers)
$27.1M on General & Administrative (managers/executives/HR)
This was spread across ~820 (as of July) employees. Hosting + Rent + Employees = $188M. Basically they spend $229k per employee which works out to very roughly: ~43% Tech, ~42% Sales, ~15% ManagementBy comparison, Cloudera is quite similar: 42% on Tech, 45% on Sales, 13% on Management. They made $261M last year and spent $448M, losing -$187M across 1,470 employees ($305k per employee)
The conventional wisdom is that it works better to get big with an unsustainable revenue model and convince people you can make it sustainable than to stay small with a sustainable revenue model and convince people you can make it big.
Spend whatever you can to capture the land, then charge rent.
Sometimes it turns out you can't hold the territory. Sometimes it turns out it's not worth much. But the times it works out are the times that make funds.
Companies like Mailchimp and 37 Signals prove that the "logical" way to do it works pretty well.
(Not a criticism of your comment, just the get big fast idea)
This used to be called fraud, but now calling it out as such is thought of as regressive and anti-entrepreneurial.
It's like:
Case 1: "We are spending like mad to capture what we believe is a valuable market as fast as possible. This means we are losing money like crazy right now, but it is working and we are growing fantastically. Once are in a large dominant position, we believe we will be able to retain that market, so we won't have to spend as much on growth, and we can focus our energy on maximizing revenue and being capital efficient and start making a lot of profit."
Case 2: "We have validated our product market fit and business model, and are profitable. Our market share, growth and revenue numbers are small but stable and positive. We believe we will be able to rapidly accelerate our growth and market share in the future while maintaining our margin and start making a lot of profit."
Both are good, neither are fraud, but (1) currently tends to be the favored approach for venture financing, and one way or another it tends to be venture financed companies that end up dominating the important tech markets (though that doesn't necessarily means it's casual).
It's just injection of both money and risk, amplifying the result. It'll fail more often than usual. But if it succeeds, wow.
If it really is a bad idea, and those firms have been so successful for so long not because of it but in spite of it, then it seems like a huge opportunity for others to come along and displace them with a better model. There's a lot of money in many of these tech markets. But we don't see that happening.
I guess the answer is that it's unintuitive... it seems like an obviously bad idea to many people, but the people that have the most experience think it's a great idea and continue to succeed with it.
There are other approaches: in China, for example, investors generally considered profitability much more important and expect it very rapidly, like in the first 6-18 months (though this has eased quite a bit towards a more SV-style model in recent years).
The gripe then is that companies can't have any long term vision or go big because they have to be making profit immediately and constantly.
Something about green grass...
I meant that a lot of those people are down with the land-grab now / rent later model.
On the flip side, if you're a small business trying to grow your company, this hole "carve out the market operating a loss in hopes that you'll make it big" idea doesn't work in your favor most of the time, statistically speaking.
Modest investment for modest gains for modest success for long term growth is the smarter bet for the business owner (usually), but that's not as flashy, headline worthy, or profitable for the investors as the go-big or go-home approach.
So, it depends on what perspective you're taking as to whether this "conventional wisdom" really is good or bad.
Spot on. And this rent-seeking behavior is all about becoming quasi-monopolist in a niche and it's anticompetitive and anti-innovation.
Real R&D is done only to capture land, then it is replaced by PR and all efforts go into holding the trench.
Been there, done that.
From data in the MongoDB S-1:
2016 yoy revenue growth: 58%
2017 yoy revenue growth: 55%
MongoDB is part of the same thesis as something like Twilio -- they IPO'ed over a year ago with the same belief around differentiating via developer-centric customer acquisition. Twilio is still putting up ~70% yoy growth.Each time, I'm tempted to pull the trigger and invest a moderate five digit sum. I just can't go through with it. I usually buy and hold, long-term investing, and Twilio is one that I've been monitoring since their IPO.
I'd probably pull the trigger if I saw just a bit more fluctuation. It hasn't necessarily got to be just growth, but some fluctuation just to indicate that they are doing something of note.
For 70% yoy growth, it doesn't seem to be really impacting the company's valuation. I'd just checked it earlier this week, and just checked again now, and it's pretty much been the same price for a while now.
I think the price was driven up to 20x because many thought it would be acquired.
It also has a ton of short interest in it - so you really shouldn't be investing in it at this point. Do some more research outside of what the price is doing before doing anything (there are undervalued stocks out there)
[0] https://qph.ec.quoracdn.net/main-qimg-c6817033630aaf74d05421...
Most of my assets are managed by a financial manager, but I do like to dabble with a smaller fund that I can risk losing entirely. I've actually had pretty good results, considering I'm not really skilled at this.
One of my methods is to simply read comments at sites like HN, Slashdot, Fark, and maybe even Reddit. I look for companies who are getting free publicity and are being reviewed by people who know more about the tech/business than I do.
I then go watch the trading volume and look for fluctuations. I'll read everything I can find about the company, including things like comments from employees at sites where employees anonymously rate their employer.
So far, it has been pretty successful. I made some pretty good money on Yahoo! at one point. I also bought ~$20,000 worth of Tesla when it was priced at $24. I still own those, I've not sold them. There have been a few others and they've done well enough.
I am absolutely not skilled at this. I mostly just buy and hold and plan on selling when it reaches a certain price. I don't have any of it automated, or anything like that. I've never tried to short or do put options. I'm not even entirely sure what the last one is.
It is just me playing around and learning as I go. I never spend anything that I can't afford to lose. I tend to go really slow and do a lot of reading before buying anything.
I've also had some luck with a slightly modified method. When I go to the grocery store, I'll look and see what brands are most frequently in carts and what isn't fully stocked on the shelf. I'll then look up the parent company and make a note of it. If I see that brand continually in shopping carts (I peek, I don't ogle or take pictures) then I'll do more reading and buy some shars in their parent companies. I notice that they seem to have continual but slower growth than the tech companies.
It's more or less just a game. I'd absolutely not take investment advice from me and I'm pretty sure my methods are unsound and probably unorthodox. I am absolutely open to advice, however.
So, with that, I thank you immensely. I'll continue to keep an eye on Twilio but I won't jump in just yet. I may never jump in at all. It's just on my, 'mentioned positively a lot list.'
That's a great idea and I've found companies exactly like that (although as private companies - scouting for a VC). We're really in an advantageous position working in tech because we know which companies are doing well and where companies are spending their money.
One disadvantage is that a lot of gains are privatized or with VCs - and some of the best performing companies remain private for longer - but there is still some growth in public markets
I tend to follow the cloud, infosec, social and other tech public companies. I think the SaaS stocks are a bit overvalued at the moment, and there are too many that spend too much on sales and marketing to fuel growth. One of the great benefits of SaaS was that it could infiltrate companies from the bottom up and bypass the S&M process and customer acquisition costs, but there really aren't many of those - and even those companies that did do that, have ended up spending a lot on S&M
I did like Twilio a lot - I liked the Authy acquisition and growing out that way. I'm not sold on the "integration without programming" promise - a lot of companies have tried just that but it hasn't worked. You need dev platforms and developers. I was hoping Twilio would provide a drop-in oauth/openid server for enterprise because the current solutions there suck (serve both internal, intra and external auth backed by LDAP, AD, RDBMS etc.)
Theres a lot of value in their global integrations and routing - but i'm also not sure what the ceiling is for voice + SMS and outside of a handful of countries in emerging markets most messaging is application layer. Being able to push messages via WeChat, FB, WhatsApp etc. would be interesting
But you're right - can't go wrong with long term investments in these markets - either a fund or a basket of stocks you know. The Motley Fool posts are usually good value on getting up to date on some stocks, although there is a lot of people talking up or down their own investments there with what borders on FUD sometimes.
It is quite a change. I've been retired for ten years, but I'm still getting used to certain things - and there were many things I had no compelling reason to learn.
Which is why I dabble in the market. I've even done some of my own bond selection. I am a sort of partial to bonds because then I can see what project it is that I'm supporting, find out who that project is supporting, and make choices that are both ethical and financially sound (less risky might be a better term).
It has been fascinating to learn some of this stuff. I do visit Mötley Fool sometimes but I mostly only use it as an educational resource. I'm not sure I can put my finger on it, but it just seems a little bit off to me. It's a vague thing, but it seems like they are trying to push me in a certain direction, like they are trying to influence not just what I should buy but the categories I should buy in - and I'm not really sure they have my best interests in mind.
I don't know if that makes any sense, really? It just seems off to me. It's like a feeling that I'm being manipulated. I'm pretty sure I'm not a paranoid schizophrenic or anything, it just isn't where I go for specifics. I happily go there to research and learn.
I still own a whole lot of shares in the now-parent company. I've been pondering unloading some of them and moving them to a more risky position. They are steady growth and I have no complaints but I'd like to put more into the account that I control and that is one way of doing it. Again, nothing that I can't afford to lose.
You've given me a lot to think about and I'm quite grateful. I'm always open to good advice. ;-) I freely admit there are many things I don't know.
Interesting! How did you start with such a role - scouting companies for VCs?
Read something like this in this book: https://www.amazon.com/Laughing-Wall-Street-Investing-Connec...
Never thought it could be applicable to tech too. Gave me something to think about.
In other words, don't take advice from me. ;-)
I've read plenty of negative comments on Mongo. I'd like to hear the other side of the story, if possible.
I also use Postgres regularly so I can compare the 2. And in my experience, I always enjoy working with Mongo more.
Many people don't care about the developer experience and rather focus on Mongo's lack of features like joins and transactions. There's definitely tradeoffs to choosing Mongo and I wouldn't criticize anyone for picking Postgres over Mongo, however the amount of belly-aching about how Mongo is "the worst" was always pretty ridiculous.
The other issue that got me was I was running queries that should have used an index but indexOnly kept coming back false. I dig into the Mongo JIRA and sure enough it was a bug and queries were returning incorrect values for whether they were using an index.
The reason most people got mad at Mongo was probably their benchmark gaming though. They made unsafe writes the default for a long time so their default configuration benchmark would blow away SQL databases which fsync to disk by default (very reasonably!)
Huh! We started with MongoDB in 2009 and went live with it in 2010 (though I left that site in 2010) and as far as I am aware we were (one of?) the first paying customers of 10gen. I remember my boss joking about how he needed to press 10gen to actually accept money for support.
I even contracted wtih MongoDB Inc in 2012-2015 but gosh, the query interface being awesome is not my experience for complex queries. Multiple $elemMatch makes for nightmare queries. Note: $elemMatch got added because we asked for the functionality but the syntax is not our making, that was Eliot.
In fact, out of all MongoDB criticism https://www.linkedin.com/pulse/mongodb-frankenstein-monster-... this one is the one I sorta agree with (even if the author is reprehensible but let's try not get caught up on that).
Compared to Mysql and Postgres, it does have an out-of-the-box partitioning scheme, which is something, and a reason to use it (although I'm not sure it outweighs the downsides).
Compared to newer cloud databases like Spanner, Citus, or Aurora which scale well but also provide your with ACID guarantees reminiscent of traditional RDMSes ... there's really not much there.
Both MySQL and PostgreSQL support out-of-the-box partitioning. Are you referring to sharding?
Hopefully it's fairly obvious from the context, but yes, I'm referring to horizontal partitioning [1], or sharding.
---
The top post on HN right now is about PostgreSQL 10 features, of which the very first feature listed is "Native Partitioning" (and it's not about sharding). Relational databases have been using the term "partitioning" for a very long time so if you're going to compare features across comparable systems, you need to use the correct terminology.
https://dev.mysql.com/doc/refman/5.7/en/partitioning.html
https://www.postgresql.org/docs/9.1/static/ddl-partitioning....
Meanwhile the feature you're referring to is sharding and each of these databases refer to it accordingly:
https://docs.mongodb.com/manual/sharding/
https://wiki.postgresql.org/wiki/Built-in_Sharding (via forks)
https://www.mysql.com/products/cluster/scalability.html (via a separate product)
Let's also keep in mind we're discussing MongoDB which has a very rich history of using misleading benchmarks to showcase their product (e.g. benchmarking the number of requests/sec the server can select() versus the fsync() rate of a RDBMS), so I think it's useful to be extremely clear what we're talking about.
My favorite MongoDB moment was when Stripe wrote MoSQL so they could sync Mongo into PostgreSQL so data scientists can do joins and otherwise interpret the data. Now you have a “SQL replacement” and SQL instead of just using SQL!
I can see it for truly self contained records at massive scale but IMO it falls flat as a RDBMS replacement which is how most people probably use it still.
I imagined that by using "partitioning" most people would probably know what I was talking about, but I've been working with MongoDB for a long time, so I probably have some cognitive bias here.
"Sharding" is the more specific/better term, but I'd still say that although more general and possibly ambiguous, partitioning is still roughly correct.
Back in 2004 or 2005 when I first learned about "sharding" it was introduced to me as partitioning.
There's a lot more help available online for Mongo than any of those. Of course, *SQL has a lot as well.
Prototyping apps with little relational data.
Logging.
Would ElasticSearch not be superior for logging? Its (mostly) solid as a Graylog backend storing 10s of TBs of logs (in my experience).
It's that situation where a single structured User object would "foil-out" to like 10 de-normalized tables. It feels ridiculous. It often is a bit ridiculous. Also, I'm not sure how much Open Source RDBMS have improved in the last 8 years, but I know for a fact that MySQL used to just melt under joins like that with any serious load.
As far as the recent OS RDBMS JSON additions, they're just that - recent additions. They feel tacked on. They're treated differently then first-level values. Support in ORMs is lacking. It's hard to find examples online. They're not nearly as easy to use and well supported as hierarchical data is in systems build around it from the ground up (of course).
As far as why MongoDB... because it's the most popular solution. If you hit a problem, someone had probably hit it before, and you can probably find some material online. The leading drivers and libraries are relatively mature and widely used. It makes it a much safer bet as far as tractability of issues you will hit.
I don't really like MongoDB, but the case for using it seems pretty strait-forward to me.
Cloud services are a great option to have available, but there are many reasons organizations choose to manage their own instances... pre-existing infrastructure investment, flexibility, data location and control, cost structure, regulatory requirements, etc.
I read here that Mongo has started a cloud-based offering, but the core of their business competes against other self-managed storage software like MySQL, Postgres, Hadoop, etc.
So our sample metadata has the generic metadata about each sample (where it's from, when was it collected, etc.). Our feature metadata is the particular feature metadata (DNA amplicon sequence variant, taxonomy, all seven taxa levels pre-split). These would work perfectly fine in a standard SQL database, but the problem is when we get into our sample-by-feature table/collection. Currently, we have over 400k unique features and tens of thousands of samples. If we were to try and map the frequency of each feature in our samples in a standard row/column relational database table, our table would be un-usably large (or just entirely not work as PostgreSQL, MySQL have a hard column limit). Thus, the benefit of MongoDB's document system fixes all the issues this causes.
Each of our documents in the sample by feature table can consist of ONLY the counts of the features that were in the sample, ignoring all the other N-thousand features that may be present in others. Building a pandas DataFrame from a query of this data will just fill the absent features with NaN, and we can just fill those NaN's with zeroes and carry on working with our target subset of the database.
The question, again, is why you'd use MongoDB even for document storage when there are so many alternatives that are safer and better-engineered. Even Postgres has a JSON data type that, by some reports, works better than Mongo and is much safer to use.
Another thread here[1] has gone into some detail about alternatives.
The most mainstream and interesting of these is Cosmos:
https://docs.microsoft.com/en-us/azure/cosmos-db/connect-mon...
(Cosmos is actually one of the most interesting DB products available for production right now, in my opinion.)
- FEATURES table (~400k rows), primary key: Feature_ID
- SAMPLES table (tens of thousands), primary key: Sample_ID
- OCCURRENCE table (what you observed), with the fields Feature_ID, Sample_ID, Occurrence_Count.
This is pretty much a standard solution well proven in data warehousing...
The aggregation pipeline is also quite nice. I actually prefer it to Elasticsearch aggregations now. I've done some reasonably complex queries involving grouping deeply nested arrays of embedded documents, etc. using the aggregation pipeline.
Put it this way, with Elasticsearch when you have nested documents and the schema is variable and you want to do aggregation you end up in mapping hell. There is none of that crap in Mongo.
You can use a query builder [1][2], although it's not exactly create a JSON object for a query but still better than directly writing SQLs and IMHO it's more clean than JSON object queries.
Mongo doesn't have JOIN pain, sparse tables, many to many join tables, etc - all stuff you need programmers for on sql
1. It's easier to extend the pre-defined model classes that our platform provides with new fields, without having to manage migrations. Mongoid manages the schema for you.
2. Because our apps represent an eCommerce "storefront", they are _not_ the system of record for our clients. Each client has their own way of storing this data, and fulfills orders through an order management system. They control all of that, obviously, because it contains important financial data that they need to retain.
3. MongoDB is a well-supported database, with a large ecosystem and lots of users. It's a familiar DB for new developers that we hire, as well as for systems integrators who are also building apps on our platform. Using MongoCloud and official support from MongoDB, Inc., hard questions about our database technology are just a phone call away. Postgres is amazing, but it isn't supported by a company you can turn to when shit really goes south, so it's a scary choice for enterprise service providers.
4. It doesn't have terrible documentation. Pretty much everything is there, it's just hard to find. I really wish they would use something other than Confluence because the search on there is awful.
All this aside, I still use Postgres on my own Rails apps because I don't need the complex features of MongoDB. But after a few years at my current job, I can definitely see why Mongo was chosen.
1) Mongo is not better than Postgresql JSONB and other Postgresql features, especially in 10. 2) There was NEVER a Mongo cluster management tool named Sheriff Bart! It litterally sells itself: Mongo Loves Sheriff Bart. 3) ArangoDB is able to provide many of the Mongo features with some ACID compliance and a better graph solution. It even has joins. I get that people use documents to avoid joins, but really. You still want them.
To the same simile, if you care about use, freedom and reasonableness, you'd pick Android. So too anything other than Mongo. That's what I don't get, why would anyone want to invest in Mongo? I say that as a Mongo certified develop (best way to learn at the time).
- There are the expensive legacy relational solutions (these are on a long slow death).
- There are small open source and sometimes even closed source projects that are either going to be dead or gobbled up; or at least far too many people will fear they will which will prevent adoption.
- There are cloud-native lock-in solutions.
- There are well-established large community open source projects that stay alive because there's enough stakeholders but they don't have strong commercial backers.
All of these categories are a surprisingly interesting market opportunity for a disruptive commercially backed more vertically integrated open source player to target.
Caring about schema design, database migration, or even code correctness doesn't really help with this. Mongo in comparison has no learning curve, crazy number of pre-integrated libraries, and works well enough at low scale. This might sound like cancer to corporate devs but the tradeoff does make sense for individuals/demos/startups.
A illustrative case study: https://medium.com/unboxd/how-i-built-an-app-with-500-000-us...
There is no real good nodejs RDBMS ORM in the class of what other environments provide. I recently had a company rip out nodejs => sequelize => pgsql and replace it with nodejs => protobufs => sqlalchemy => pgsql
The impression I get is that at scale, you don't really "need joins" and multi-table ACID for the kind of workload that MongoDB is targeting, i.e. massive throughput embarrassingly-parallel low-latency OLTP short requests that do point queries and point writes. It seems to be atomic, consistent and durable enough for that [1].
For analytical queries that really do need expressive SQL features, you generally wouldn't want to run them on the same database anyways, not when you're "at scale" and your seven-way join could impact other request latencies. You export it to Redshift or HDFS/S3, and do all the reporting/BI/analytics on it.
Second of all, Mongo marketing and ecosystem is foremost about making dashboard crud apps easy with not a lot of engineering. dashboards are not about point reads. Whether or not mongo is engineered for it, this is what the customers are using it for.
Third, I just wrote a proposal today for a client on Mongo, not at scale, who experiences silent database failures due to lack of acid. they only noticed because Mongo sometimes tells them there are -2 people left in the room.
Nobody at scale uses mongo because somewhere along the way you spend your giant bags of scale-money to hire a real engineering team to solve the silent errors and failwhales you've been suffering by migrating to an architecture that actually lets you reason about failure a little better than "it looks like something bad happened but we have no idea when how or why"
ACID was defined upon Jim Gray's formalization of the terms "transaction", "atomicity", "consistency", and "durability" [1]. It applies regardless of however many nodes a system consists of. It cares about a system holistically, not what it's physically made up of. Gray defined them acknowledging the preexisting work on fault tolerance and high availability with replication and hot standbys, literally situations where it's worth talking about C-as-in-CAP consistency. A transaction is literally defined upon an agreement protocol like two-phase commit. Similarly, Eric Brewer literally defined the C in CAP following the C in ACID [2].
The two concepts are clearly related, if not identical. It's not like I magically can't ever have ACID transactions once a network is involved, as long as the network heals.
To come at this from another angle: ACID transactions are an abstraction. They serve only to make it easier to reason about concurrency and synchronization. If you're telling me that this abstraction falls apart inherently because of the network, then frankly it's not a very good abstraction at all.
PostgreSQL is ACID when it's a system that encompasses a single node. PostgreSQL is not ACID when it's a system that encompasses more than one node. Simple as that.
I think it is even more disingenuous to lull people into a false sense of security just because Postgres is technically "consistent" on a single node. It's 2017 -- your data getting fsync'ed to a single disk, in a single machine on a single rack in a single datacenter in a single region -- is simply not enough anymore.
[1] http://jimgray.azurewebsites.net/papers/thetransactionconcep...
[2] https://pdfs.semanticscholar.org/5015/8bc1a8a67295ab7bce0550...
Pretty sure Postgres has supported two-phase commit since at least version 8.
It's not saying much to say that a database management system is ACID as long as you constrain your updates to a single record in a single table.
What I'm tired of is the rhetoric built upon the dichotomy that Postgres is ACID and MongoDB/NoSQL is not. As it stands, neither is, in any scalable fashion. And in no way is Postgres a panacea for every possible kind of data problem.
And like you said. It's not saying much to say that a database management system is ACID as long as you constrain your updates to a single machine.
There are better things on the horizon, databases that can actually do it all.
Postgresql with read replicas is ACID-Consistent transactions because there is a single writer process to prevent data loss. Only the reads are distributed and thus cap-AP eventually consistent.
You are essentially asserting that a precondition for ACID in Postgres is that the underlying storage medium (or at least the bits on them) will never suffer permanent failures, and has infinite 9's of availability everywhere in the world, instantly. Then, and only then, can PostgreSQL provide anything resembling seamless consistency.
Sorry, no dice. This is not how distributed systems work in the world outside the walled gardens. I'm a huge proponent of the cloud, but I'm not a huge proponent of things that only work if you rely on the cloud.
non-ACID writers like Mongo lose writes routinely, every day, often without anybody noticing. There are no guarantees whatsoever about data integrity. ACID writers lose data in 6-sigma catastrophic failures only, and you can control how many sigmas by tuning durability.
You asked a question about HA configurations so I answered in terms of HA configurations. Serving durable HA storage is literally what dynamo/riak is for. "The write operation is durable. dw (durable write quorum) is a configuration setting used to specify how many replicas to commit to durable storage before returning a successful response." https://stackoverflow.com/questions/22736821/riak-database-a...
Anyway I'm interested in continuing to discuss this if you are because this is a subject I am beginning to write about as part of my startup. so this conversation helps me. Perhaps there is a better medium though if you would like to continue?
Repeat after me: PostgreSQL isn't ACID in a distributed system.
PostgreSQL isn't actually ACID when your database is multiple machines. PostgreSQL isn't actually ACID when you set up your first read replica on RDS. PostgreSQL isn't actually ACID when you use streaming or logical replication. PostgreSQL isn't actually ACID when you start sharding your users table. PostgreSQL isn't actually ACID in a world in which people need to scale out from one big box. It's eventually consistent, which is even less than I can say about MongoDB on a single-document level.
Personally, PostgreSQL is my favorite DBMS. It's well-engineered, extremely mature, and has lots of great features. Working seamlessly and providing strong guarantees outside a single box, unfortunately, isn't one of them. Not yet, at least.
To address the rest of your points: those people are using MongoDB wrong. PostgreSQL basically stops working well too, once you start mixing transaction processing and business reporting and BI in the same box at scale.
If you're going to claim that MongoDB is bad because it's not ACID or somesuch, you better hold PostgreSQL to the same standard, and understand precisely why it is that the two systems were built so differently.
Postgresql with read replicas is ACID-Consistent transactions because single writer, and CAP-AP eventually consistent because distributed reads.
It is easy to agree with you here: "PostgreSQL basically stops working well too, once you start mixing transaction processing and business reporting and BI in the same box at scale." It's worse than that - the app has to be coded before it can be scaled so you get fucked by complexity-scale via ORM a lot sooner than bigdata-scale. But as you sort of say, the point of a data warehouse is to be cap-AP (eventually consistent) through read-replicas without breaking ACID-consistent transactions for the system as a whole.
as to the argument "everything is bad at scale" i think that has merit too, I just gave a talk at ClojureNYC about building real apps with Postgres (tables) vs Neo4J (graph) vs Mongo (documents) vs Datomic (eavt): https://github.com/hyperfiddle/hypercrud.browser/issues/4 (Did I say real "apps"? I meant "balls of mud")
What good is my Postgres single-node ACID if I have to do all this work to deal with replication lag?
Git is another ACID single-writer system with strong consistency and distributed reads.
To be fair, it's an easy win to throw a replica in the mix with no downsides for BI.
Not to mention, BI at scale tends to send data to redshift or the like first
That meant anyone could connect over HTTP and get your data.
From the article:
The problem for MongoDB users seems to be that on some systems the default configuration has the database listening on a publicly accessible port as soon as it’s installed. Users are supposed to read the manual and set up access control and authentication after installing the software but it seems that plenty of them don’t.
I think that counts.
Yes of course, users are always responsible.
That doesn't mean shipping a product with zero default security was a sensible thing either. I'd note that other database vendors don't do this.
User error is a guarantee, and great software minimizes the paths to an error and also eliminates classes of error that are easy to eliminate.
- Command line login never works, you have to get into Mongo shell, then authenticate.
- Attaching multiple db permissions to one user has all kinds of gotchas to: I have to switch to each database and re-auth instead of just authing to the user and then switching DBs without further auth.
None of it works intuitively.
I know jokes on HN are risky, but this was both kinda funny and somewhat accurate.
1) MongoDB allows me to be more agile. I don't have to deal with database migrations (No locks when adding new column for example), which allows deployments at any time.
2) Indexed arrays. Allows to add "tags" to any entity which are useful in production (A/B testing, force specific behavior).
3) Easier to manage. I don't need an expensive PostgreSQL consultant to setup and hope for the best.
Your mileage can vary.
We've actually just started having the pain of Mongo migrations; adding indexes to large collections. If you just create the index on the primary and let it propagate throughout the cluster, then it will block further oplog replication on the secondaries and the whole cluster will go down for majority writes. The proper way is to take each secondary out of the cluster in turn, add the index, then step-down the primary and migrate it.
It's just as much of a pain as migrating your favourite SQL database, although at least you don't need to do it for small collections and for adding columns (which is a big bonus).
Thanks.
But is there a document store out there that's faster than MongoDB?
It's built on .NET Core, and our current performance is 140k writes/sec. We also bend over backwards to optimize read speeds: we generated indexes automatically based on your query patterns, discarding unused indexes and throwing server resources behind the hot ones. Also, unlike many other NoSQL databases, we support transactions and atomic writes.
[0]: https://ravendb.net
Very curious about RavenDB as I’m writing a lot of .NET Core these days. How would you say it stacks up against ArangoDB?
Edit: Ok, just saw the pricing. Ouch.
- Free, with a max of 3 cores and 3 distributed nodes
The paid version will be an Enterprise license without these limits.
Especially if you’re using the search tools to retrieve data, I think a properly indexed MarkLogic would be quite a bit faster, and still more reliable.
https://github.com/pingcap/tidb https://github.com/cockroachdb/cockroach
They provide the features of both RDBMS, such as ACID transactions, SQL, and the scalability of NoSQL.
I used to use Mongo a while ago and found it a very painful experience (this was a few years ago). With postgresql I can use SQL and get the benefits of document storage, and so-far I've found it efficient and rock-solid.
EDIT: instead of downvoting me explain to me what I said wrong, I’m seriously wondering why it needs to be configured for sane defaults ..
Why wouldn't you just use postgres with jsonb data type?
For a long time here on HN, mongo was terrible, never to be trusted, and everyone should move to RethinkDB. But the RethinkDB boat has now foundered, and might be resuscitated by the LF, or it might sink again. If you'd followed the zeitgeist, you'd be in a worrisome spot right now.
1) People need NoSQL. This is rarely the case. That said, Mongo often lets you model structures how you think so it's nice for prototyping. I'm very comfortable with SQL so I wouldn't do this anymore, but I could see value in it once upon a time, especially if you're already using JS across the stack.
2) DynamoDB is not the same at all. Its query and sharding models are entirely different. In most cases, it does NOT allow you to model something usable how you think. Don't get me wrong-- it's a great technology, and we get a lot of value out of it at work, but if you're directly comparing the two, you probably haven't actually used it enough.
If you can live without transaction, then think about utilizing MongoDB.
- Add index without blocking anything - Array index is transaprent from you. Same query for both of array or a single field. - Partial index allow you to query on index while keep index size small to a certain amount of document - TTL index help you avoid deleting document manually such as session data - Spatial index avoid you to not index document missing field - GEO spatial index is just awesome. Super easy to use - Good enough full text search - Data compression, out of the box - Data compression for replication as wel - Super easy to manage cluster: add, remove, hide node
Matt Kroll
Which is completely false. Ergo his entire post is false.
You were completely wrong and borderline libellous with your insinuation.
Shame on you.
I made a honest mistake: I thought Matt was head of sales but looking at LinkedIn, Matt's actual title was 'Enterprise Account Executive' and 'solely responsible for managing all [Fintech] sales'.
I believe their largest sales channel is Enterprise Financial Services and so I was concerned about Mongo's IPO since some people left - especially right beforehand.
I respect Matt and believe his comments, but I did NOT lie.
"Outstanding shares of Class B common stock will represent approximately % of the voting power of our outstanding capital stock immediately following the closing of this offering, with our directors and executive officers and their affiliates holding approximately %, assuming in each case no exercise of the underwriters' over-allotment option."
They also had to report some more detailed financials when they filed to go public: https://www.cnbc.com/2017/09/21/mongodb-ipo-seeks-to-raise-1...
{field:{$exists:true}}}
vs
{$set:{field:value}}
have to google every time.