Hacker News new | ask | show | jobs
by emileifrem 2783 days ago
We just did our annual conference GraphConnect in NYC last month. There's a BUNCH of talks online of people who are very successfully and very happily using it in production deployments. Check it out here: https://neo4j.com/graphconnect-2018

Btw, if you've ever stayed at a Marriott (or anyone they now own: Starwood, Hilton, Ritz Carlton) then you've used Neo4j in production (to book that room). If you've ever purchased a flight ticket, then you've used Neo4j in production (over 99% of all fare calculations are done with Neo4j). Etc.

2 comments

Out of curiosity, how would a graph database help when booking a room? I would have thought a simple table:

    create table room_booking {
      roomid,
      booking_started,
      booking_ended
    }
and some simple sql to check if any rows exist within the required date range would have covered it? What other aspects am I not considering?
Oh, there's a bunch of stuff in addition to that. I could give it a shot, but would probably mess it up. :) Way better if you hear it from the horse's mouth. Here's Scott Grimes from Marriott at GraphConnect 2016:

https://www.youtube.com/watch?v=wdFYEuWWpzo

Pretty amazing stats in there!

Thanks, I'll have a watch when I get the time.
I used to work at an OTA (online travel agency, ie Booking.com, Hotels.com). There's all kinds of complications to what seems to be a pretty simple thing: a building with rooms that are either occupied or not. There's multiple rates per room for a single night, then there's something called room rate plans which I won't get into. In other words: it's more complicated that we think (or than it needs to be).
This type of things is based solved with Prolog. The issue is that folks are trying to solve declarative problems using procedural/object oriented/functional programming. Because we store data in databases, we have twisted it into a database problem but it's not.

  book(Room, Rate):-
     availableBuildings(Buildings),
     availableRooms(Buildings, Rooms),
     rate_less_than(Rate, Rooms)
     cheapest(Rooms, Room).
However complex you think this problem is, it's pretty simple. It's a very old problem, scheduling, well understood and solved. Using the wrong tool makes it a nightmare. Using the right tool makes it ridiculously easy. The solution is not the database, but the language.
Very interesting... my inclination is that you’re probably right. Any tips on how to learn to use Prolog with pulling data from external sources?
Prolog's DB is just a text file. You can construct a DB file by using SQL to select into a text file.

You can use ODBC http://www.swi-prolog.org/pldoc/doc_for?object=section(%27pa...

You can use CSV http://www.swi-prolog.org/pldoc/man?section=csv

I've used the above methods.

For RDF, you can load with various methods even over http http://www.swi-prolog.org/pldoc/man?section=rdflib

I too would like to hear about getting facts from an sql db, and writing back results from prolog - it's hard to see how a prolog text file can/could be used as a source for transactional problems like booking (making sure the answer you find can be committed while still valid).

I suppose one could have a prolog service that came up with suggestions, ordered by preference, and then attempt committing them in order to the actual transactional storage layer. But I don't see how you could avoid re-implementing transactions.

With an rdms you could look for options, and attempt a booking in a transaction, and have a fairly established way to resolve conflicts.

Do you have any reference material on using neo4j for complex pricing - we're looking at using neo4j for this, and some evidence that it's going well in other places will increase the comfort level.
Off the top of my head, I know of two big and complex pricing engine projects in production. One is the Marriott one I referenced in a previous post. Scott Grimes spoke about it at GraphConnect 2016:

   https://www.youtube.com/watch?v=wdFYEuWWpzo
The other one is confidential but is in the airline industry.