Tried using official GO driver in production - SOOO Painful!


(Jeremy) #1

Why on earth has the Go Driver been linked to Seabolt / so painful. We have even tried the static link approach however that is broken as it required dependencies on CLIB and then versions get misaligned . This approach feels SO not Golang Package.

Anyone have any suggestions for a better and friendly driver for Production environments ?

We've been bitten !


(Matthew Browning) #2

As far as I know the only other native Go driver around is the community developed one, but the author is no longer maintaining it. Might be able to fork it and keep it updated.

As for the Seabolt issue, I couldn't agree more. It ended up being the deciding factor to switch away from Neo4j for our company, especially when we started adding more developers to the team.


(Jeremy) #3

Thanks for the suggestion / We had been using https://github.com/go-cq/cq before trying the official driver. Maybe Neo4J guys could provide some sponsorship to have one of these opensource GO drivers maintained / I suspect there are many more Golang developers would prefer such an approach.


(Matthew Browning) #4

From my experience it looks like we're out of luck for an official native go driver. I've expressed my concerns over on the slack a few times before making the switch since working seabolt into a golang workflow was a pain, and there was some major performance issues, along panics when using goroutines for database interactions since threads are being spawned when it goes from Go to C. They did fix the goroutine issue, but that added even more of a performance hit.

I think the reason we have an official golang driver is because they planned on making a C driver and saw an opportunity to add another language to the marketing material through cgo.

Hopefully in the future something is done about Seabolt, but as of right now I personally don't think the current solution lives up to Go.


(Nigel Small) #5

Sorry that you've both had trouble with the Go driver. You're absolutely right (Matt) that the driver was a "bonus" spin-off from the C library work - we saw an opportunity to fill a need for the Go community which we hoped would be useful. Unfortunately, it appears not to have been so useful for all Go users. That said, we do have some customers using it, and we therefore know it can work in some environments.

But obviously that's not much comfort for those such as yourselves who are having trouble :(

We've taken your feedback on board and as and when time and people allow, we'll look into the possibility of a native Go driver. Unfortunately, I can't give any timings around that, so for the meantime, the only other options will be a community driver or the HTTP interface. The latter might be your best bet as it offers regular Cypher execution, with transactions, with only a few restrictions around the type system (due to JSON limitations). We are working on bringing HTTP up to date in our next release too, so it's perfectly safe to build upon.


(Jeremy) #6

Thanks Nigel @technige / this is positive news. Indeed I can understand it's possible to get this running in production however with multiple moving pieces and dependencies it's is unfriendly / and likely to have issues - just like some of us have mentioned.

Clean GO driver package supported by Neo for sure will be embraced by the community.