What are the pros and cons of storing page content in Neo4j rather than mixing Neo4j and MySQL?


We are working on a site where user recommandations will be key. For this, we would like to implement Neo4j.

Now, do we still need MySQL to store the articles? Couldn't we juste use Neo4j alone?

The key is that the site will contain short erotic stories, principally aimed at women. The user will not be willing to wait, so that we need to ensure that there will be good performances during load peaks.

I detailled my tought a bit more here if you need more context:

All advices are welcome. I would like to take the best decision from the start.


Are you saying if you didn't use Neo4j, that in MySQL you would store the BLOBs of data that would make up the story instead? Or are your stories so short that you would store them as VARCHAR(65535) in a SQL table?

Regardless of the database Neo4j or MySQL, I wouldn't store the actual story text in either database. You're right to use Neo4j as a recommendation engine. What I would do is for each Story Node I'd store any meta data about the story, i.e. title, short description, publication date, etc... with the relevant graph data linking out to topics and authors, etc... But the actual story text I would use a service such as AWS S3 to store the full text. In the Story Node have just the S3 URL saved in the node.

You're site will be busy serving up recommendations and people browsing titles and genres, etc... all day, but you'll only need to serve up the actual full story once they've selected a title to read. For that S3 makes sense as a fast document retrieval service to store that large text file.

Another opinion. And there are multiple right answers. If you are a small shop and you expect a modest amount of traffic initially, I would keep things simple for yourself. I say go agile. Get a fully functional MVP up and running, then iterate on that if you need to.

And if you do make a mistake, Neo4j is generally quite forgiving and gives you multiple options for correcting your app--adding an index, changing a relationship type, ... etc. Your stories are short. You can store your text with markup right in the database. Everything can be handled by Neo4j. With fewer moving parts you'll be up and running sooner.