How to design my GWT application on DB level - google-app-engine

I thought and read so much about GWT, AppEngine and CloudSQL last week, but I still can't find the right setup for my app on DB level.
My requirements are:
I want to use GWT, since I'm good in Java
I'm creating a big data mining project.
I'll analyse the data from the DB with Matlab (using the Database Toolbox over JDBC)
Later, users can use the application as a collaborative web 2.0 application
I want to have an easy solution, where I don't run every day while developing into stupid
Class*Excepitions due to incorrect design
I thought about the following setups:
GWT + Appengine + CloudSQL + local MySQL DB:
I'll try to keep the CouldSQL DB and my MySQL DB in sync. Then I can run my data mining algorithms locally using the MySQL db.
GWT + MySQL: I'll connect GWT directly to my local MySQL db.
GWT + Appengine + NoSQL data store +synchronize data with local MySQL db using e.g. Approcket (http://code.google.com/p/approcket/). I'll then run my data mining algorithms on the synchronized MySQL db.
Comments:
I like the possibility on 1. and 3. to deploy my app quickly with the advantage of scaling. With solution 2. I'll need to host it myself. Moreover I don't have a standardized (google) solution.
On solution 1. and 3. I worry, that it is very complicated to keep my cloud and local data in sync.
On solution 2. I can't use the advantages of AppEngine. Moreover it'll be more difficult to set it up than the solutions 1. and 3. proposed from google.
What do you think is the best and easiest solution for my problem?
Thank you very much!

Related

how to use Couchbase as a database in the cloud?

I need to make a database stored in the cloud for an application. i just need to store and retrieve images from that database to the application. i found Couchbase and i think that's the way to go for me, but im not really sure of how to start.
I suppose that if i want to use Couchbase as a database i need to install it in my computer and it will use my computer as the server. but i need to do that on the cloud, because i don't have a computer that i could use 24/7 as a server. so im not really sure of how i could install Couchbase in the cloud.
I have the vague idea (from reading the AWS page) that some hosting servers out there have the option of using them as a computer where i can install linux or any other operative system, and then install couchbase there, but im not really sure if that's true.
So, if that's the case, is there any cloud (or web) hosting service that you recomend that could do what i need? it would be better if its free, because its a class project, but i don't mind if its paid if it has a 30/60/90 days of free trial. could amazon's AWS or HP's Helion Eucalyptus do the job?
How do i install the Couchbase database in that hosting service?
If using Couchbase in the cloud doesn't work like i think it works, how can i do what i need?
I'm really confused, thank you in advance.
You are correct that you need a server (somewhere) and just install Couchbase server on it by following the Couchbase instructions.
Or you could use the AWS prebuilt version.
Using a database to store images (or any large binary data) is usually a terrible idea. They already invented a database for storing files - it's called a filesystem.
Glib replies aside, you really should consider using the built-in mechanisms you get from cloud providers for storing binary objects; if you're using AWS, then S3 would be my first choice. You get all the benefits of a distributed database: reliability, scalability, etc., but without the unnecessary complexity of using a database for something as simple as storing binary blobs. Some further reading on using S3 for object storage: http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingObjects.html
Now, there are some use-cases where it might make sense to use Couchbase for storing images, mostly if you need the high performance that you get from the built-in cache in Couchbase to retrieve the images very quickly. In such a case, here is a short list of steps to get you started:
Sign up for the AWS free tier: https://aws.amazon.com/free/
Get set up for AWS EC2: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html
Follow the getting started guide to create an AWS VM instance: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html
Install Couchbase: http://developer.couchbase.com/documentation/server/4.0/getting-started/installing.html

Best methods for developing on/from a cloud server?

I recently landed myself on a project that, like most projects today, relies on multiple relational databases and also, like most projects today, relies on the flexibility and security of cloud computing.
I got into cloud services a little over a month ago and since then I've tackled the basics of most the services that Amazon Web Services offers but have only tested and deployed personal projects.
Now I will be working on a clients server and its a hefty instance, therefore I need to research the best method for developing a pre-existing application on a cloud server. Also bare in mind that the data stored in the databases is also being updated 'live'/dynamically.
I assume it's still good practise to take a local copy to work on? In that case, is the best method to download the whole server using ssh? If so, are there any alternatives? I feel that just downloading the whole server and setting it all back up bit by bit (including the data 'stream') will be very time consuming for such a big application connected to such big databases.
Is there something a little more elegant?
If you are working on a cloud environment you may have developement environment.
You may have a local repository but nothing more than your IDE and your versionning tool.
All your service might be provided by the cloud and the most efficient way to test you code is to do it on a target Image.
personally ,I use cloud foundry or IBM Bluemix with my git repository. I push directly the modifications when i want to test.
you can use cloud services,you dont have to think about server setup/services.you will just need a repository like git.
you can follow below sample link for getting started on configuration on bluemix:
https://hub.jazz.net/tutorials
https://www.facebook.com/ibmswg?ref=hl&ref_type=bookmark

Backend as a service (BaaS) or old school SQL server for Mobile APP Remote Database

I'm looking forward to create a mobile app with a remote database. I've already tried SQL server and PARSE. I haven't really used these that long to know any significant difference since I used them for experimentation. I see a lot of advertisements on BaaS and surely it's faster to develop on. I'd like to ask if there's really a very big difference in the long term when using SQL server or using something like PARSE. And one last thing, are there any things that one has and the other doesn't or what can or cannot do? Thank you very much.
Baas offers you a complete box of tools and you do not have to bother with renting a server, adminstrating it and fighting with scalability. You can just focus on developing an app and design you backend without touching the keyboard (if you want).
A great alternative to parse or others the german backend as a service provider apiOmat; they offer a lot of features and pretty cool generated SDKs. And, in contrast to many others, data is not hosted by NSA but in germany.
I think only difference between a SQL Server and something like Parse is one is a relational database and the other runs on non-relational databases like MongoDB. BaaS offers you a ton of other features like Authentication, Custom Code and more which speeds up your development by a huge factor and does-not have you to write your own backend server.
One of the good players in the market, I think is Parse (Gives you all the features of MongoDB) / Kinvey (they're expensive and for an enterprise) / CloudBoost.io (Gives you features of MongoDB + Search + Real-time notifications). It depends on your requirements which one to pick.

Does it make senesce to use Amazon RDS with app hosted on other managed hosting service (not amazon)

I am developing a mobile app and I am now getting to the stage where I want to put all my back-end server code online for the production version (I actually want to release my app). The back-end consists of 2 parts:
MySQL Database
Actual PHP files for app access.
Looking for a service that is popular, highly scaleable and proven, I came across Amazon Web Services. Now while RDS seemed very straight forward to use for the database part, EC2 was way too complicated for me and I decided on using a managed solution, which puts it out of the question.
Seeing as the simple PHP pages could be moved easily to any service at any time (unlike the database which is a bit harder to move with no downtime), I have decided to use a much cheaper solution for the time being for the PHP pages.
My Question is: Does it make senesce to use Amazon RDS with app hosted on other managed service (rackspace, azure, godaddy etc...)?
While it is technically possible, it depends on your application if it is generally okay to do so. Keep in mind that there will be extra delay in the communication between the RDS instance and your server - and this will happen with every database request you do. You can for example check the network latency with simple tools like ping or traceroute. In general you are looking for the lowest latency possible for database queries.
However if your app hardly does any reads from the database, this could work. If not, I would strongly advise against this. In this case you would either have to install a MySQL database on your managed server or start using EC2.

Cloudant vs JustOneDB - Which one to choose?

I am trying to decide which add-on DB to use with my application when I deploy it on AppHarbor. I've two choices: JustOneDB or Cloudant. I am planning to develop a web and mobile application, which will should work with Terabytes of data.
I am searching for the easiest solution to deploy my database, without me needing to partition the DB and the tables. I want a DB that can handle a very large amount of data, but takes the sharding and partitioning architecture building away from the developer.
I also want a solution that will allow me to easily backup my large database and easily restore it.
From what I've read, Cloudant and JustOneDB are the two most popular ones, and those are available as add-ons on AppHarbor for easy deployment.
I need your recommendations on which one I should go with, the cons and pros of each one. I am developing my application in ASP.NET and C# inside Visual Studio.
There's a recent post on the Cloudant blog about using the MyCouch .Net library with Cloudant databases:
https://cloudant.com/blog/how-to-customize-quorum-with-cloudant-using-mycouch/
Cloudant also offers free hosting up to a greater than $5 bill and can work with Apache CouchDB's replication if you want to develop locally and sync it to the cloud for production/deployment. Multi-master replication isn't something many other databases offer.
Best of luck with your application!
MyCouch.Cloudant was just released. Except from CouchDb and Cloudant core feature support the MyCouch.Cloudant NuGet package adds support for Searches. There will be more Cloudant specific features added to this. It's written in C# and supports .Net40, .Net45 and Windows store apps.
You will find more info about MyCouch in the GitHub repo.
You should probably also consider MongoDB and RavenDB.
If you're just starting out, your first concern should probably be to find a database that'll let you quickly get started and build the application you have in mind. When the application becomes a success and actually attracts terabytes of data, you can start worrying about how to scale it. If the application is soundly architected, adapting it to use an appropriate datastore should not be a monumental task.
Comment removed by originator.

Resources