We chose Parse as the basis for our application. Conclusion: NOT NOT.
Stability is a disaster, performance is also a disaster, as well as support (probably because they cannot help you because all problems cannot be reproduced).
Performing even the simplest functions can lead to random timeouts inside Parse (for example, we are talking about simple login entries in PFUser):
Error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x17e42480 {NSErrorFailingURLStringKey=https:
We run into timeouts every day, and this is due to the fact that we are testing 10 max users!
This is typical, which we return all the time, in completely arbitrary moments and cannot be reproduced. Calling the Cloud Code function, which performs multiple requests and multiple inserts:
{"code":124,"message":"Request timed out"}
Try the same 10 minutes later and it will pass in less than a second. Try again after 20 minutes and it will take 30 seconds to complete.
Since the transaction does not exist, it is actually very funny when storing, for example, three objects in 1 Cloud Code function, where Parse decides to get rid of the function randomly after I say that I saved 2 of 3 objects. Great for your database to be consistent.
"Best" we got where they are. Keep in mind that this is the actual data returned from the Cloud Code function:
{"code":107,"message":"Received an error with invalid JSON from Parse: <!DOCTYPE html>\n<html>\n<head>\n <title>We're sorry, but something went wrong (500)</title>\n <style type=\"text/css\">\n body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }\n div.dialog {\n width: 25em;\n padding: 0 4em;\n margin: 4em auto 0 auto;\n border: 1px solid #ccc;\n border-right-color: #999;\n border-bottom-color: #999;\n }\n h1 { font-size: 100%; color: #f00; line-height: 1.5em; }\n </style>\n</head>\n\n<body>\n \n <div class=\"dialog\">\n <h1>We're sorry, but something went wrong.</h1>\n <p>We've been notified about this issue and we'll take a look at it shortly.</p>\n </div>\n</body>\n</html>\n"}
I am not describing here what happens once in the blue moon in our project. With the exception of 500 errors (which I met twice a month), all the rest are observed daily.
So, it’s very easy to get started with this, but you have to take into account that you are working on an unstable platform, so make sure you earn your retries and exponential deferral systems because you need it!
What excites me the most is that I have no idea what will happen when 20,000 people start using my application on this server.
edit:
Right now I have this when logging into PFUser:
Error: Error Domain=PF_AFNetworkingErrorDomain Code=-1011 "Expected status code in (200-299), got 502" UserInfo=0x165ec090 {NSLocalizedRecoverySuggestion=<html><body><h1>502 Bad Gateway</h1> The server returned an invalid or incomplete response. </body></html> , PF_AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x16615c10> { URL: https://api.parse.com/2/get } { status code: 502, headers { "Cache-Control" = "no-cache"; Connection = "keep-alive"; "Content-Length" = 107; "Content-Type" = "text/html; charset=utf-8"; Date = "Mon, 08 Sep 2014 13:16:46 GMT"; Server = "nginx/1.6.0"; } }, NSErrorFailingURLKey=https://api.parse.com/2/get, NSLocalizedDescription=Expected status code in (200-299), got 502, PF_AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest: 0x166f68b0> { URL: https://api.parse.com/2/get }} (Code: 100, Version: 1.2.20)
Is not that great?