Alternative/compatible datastores for App Engine? - java

What other "nosql" databases are compatible (more or less) with the Google Appe Engine datastore.
Alternatively, what is a good abstraction layer/solution (free of charge) that abstracts between multiple database implementations including google app engine and my application for db access.
I'd like to develop an app for GAE but later deploy it on my own server, but I do not want to have to rewrite the db code.
Important Update: The app is developed in Java so ideally the Data Abstraction Layer or any alternatives must be "Java friendly".

The AppScale project has decoupled the database backend so that you can potentially run GAE on a variety of databases. They currently provide support for HBase and Hypertable (ref). AppScale is open source and lets you run your GAE app on EC2 or your own cluster.

Strange as this sounds, but there is a great deal of similarity between AppEngine Datastore and the Lotus Domino: you may need to write an abstraction layer to handle the two APIs, but the capabilities are quite similar. However, you need to be very familar with both models to see the parallels.

Related

How to choose solutions for secure messaging front-end and HIPAA compliant database?

I am interesting a setting up a small business website, the front-end of which will be a customer portal (secure messaging center) with perhaps the ability to upload images. E-commerce capability will be needed, using Paypal and CC (US only). The back-end will be a database and the whole system will need to be HIPAA compliant.
I was wondering what platform should this be built on? Are there off-the shelf modules/libraries for secure messaging (I expect there are for e-commerce) and the database? I have experience programming Java but only on Android, as well as Swift on iOS -- wrote a couple of apps -- including the built-in SQLite features.
If I decide to contract this out, as it's most likely, I would like to have a sense of what type of programming or packages are needed. Would PHP/MySQL fit the bill?
Can you point me in the right direction so I can educate myself?
If you are looking for a HIPAA compliant storage option in Microsoft Azure, you should probably look into Azure Cosmos DB.
It provides SDKs for different programming languages, easy to query and manage. As it is widely used for SaaS based applications, it has almost all type of security compliance incorporated.
Look here for list of security compliance provided for Azure Cosmos DB.

Java scalable frameworks usage on Google App Engine

We are using Google App Engine for back-end development. We're considering the scalability, change of server and data movement to another cloud platform in future, as well the robustness in application. Please suggest the frameworks that can be used in Google App Engine (Java based).
End point exposure/Rest web services
ORM/database connection
Service and db layer integration
Logging
Unit testing
etc
Please add any points that I may have missed.
Update: The reason behind asking this question is that when we start development we will get a hell lot of samples, for example:
Rest web services - we have Spring Boot/Spring rest web services
DB - we have JDO, Google Datastore, etc.
For easy access we can use Spring Core.
If we browse through information on Google App Engine Java development, we're unable to find a list of advantages/disadvantages. It's correct that we have many options. While answering please also consider the bolded words. The question definitely looks simple from an angle, but it's a serious issue for the fresh development.
There are several products and services within Google App Engine that will help you out building scalable backends in Java using App Engine. Here are some examples based on what you may be looking for:
Endpoints Frameworks on App Engine in Java - helps with developing, deploying and managing APIs on any Google Cloud backend.
Objectify - a Java data access API, specifically designed for the GAE datastore.
Stackdriver logging - provides facilities for importing, viewing, storing and retrieving timestamped logs from apps running in GCP.
Unit Testing in Java - which allows you to test the quality of your code after you’ve written it, as well as to improve your development process as you go along.
UPDATE: This article on Designing for Scale is a good place to start for best practices on scalability in App Engine. Regarding robustness, that’s a given using App Engine, as it is designed as a robust development environment for written applications. If you’re considering moving to another cloud platform in future, take a look at the GCP documentation on exporting data for each specific product you wish to export from.
You may find these articles on Spring Framework useful, which focus on the benefits and best practices.
Announcing Spring Cloud GCP—integrating your favorite Java framework with Google Cloud
Optimizing Spring Framework for App Engine Applications

How to create a application that works both on Google App Engine and Local tomcat server?

I am creating a java based application and i want to use google app engine for its deployment. But i want this application to be movable to other servers like tomcat etc on my local or other machines. So i though want to use google app engine. But want to keep my application independent of any Google specific things. Can somebody summarize the points i must take care of. I want to keep it independent both from application and database layer perspective.
Though I am not master in google app engine however the thumb rule to make your webapp portable is to use standard specification APIs instead of vendor specific APIs. For example if your app is using google app engine UserServive (com.google.appengine.api.users.UserService) or data store com.google.appengine.api.datastore.DatastoreService , if is tightly bound with Google app engine and can not be migrated to standalone tomcat engine.
To loose couple your database for further migration you should consider using MySQl schema in google app engine. Because in future you can host your database anywhere by just taking a dump. Also, you should use JDBC apis/JPA for database operations from your application using MySQL JDBC JAR
To summarize, you should avoid any API call which has com.google.appengine* import in your source. Also, you should have your own mysql schema running in google app engine cloud.
I think you can and it's only a matter of design.
Just an example: if your application need user authentication, you can create an interface AuthenticationService and two implementations:
GAEAuthenticationService for the Google App Engine
FakeAuthenticationService for local tests running with jetty (for example)
DataSourceAuthenticationService for authentication based on a DataSource
You can do the same think with persistence, scheduler, etc... the only thing to do is:
define the objects you need and use interfaces when you need different implementations that depends on platforms

Cloud for Flex, Java, mongoDb?

I am about to develop my masters project using Flex as front end, BlazeDs, Java Web Services and MongoDB in the backend. I am looking to deploy and manage it on a cloud. (The application analyzes financial data from various sources, I will need to query multiple endpoints for news articles and DB for processing)
It is my experiment to usage of cloud rather than deploying on my local for demo and presentation purposes.
I saw heroku (http://www.heroku.com/), but I am not sure if it allows flash.
Please suggest a cloud application platform which allows Flex, BlazeDs, Java Web Services and MongoDB?
Amazon Web Services is a good place to start. You can have a instance ready in like 15-30min from signing up. If you are just experimenting, you ought to try to get the Amazon Linux Image (AMI) up and running. Scour the net on HOWTO set up Tomcat, for your requirements it might be too much to go J2EE, but you might know better.
But a word of advice, it's better to get your application working on a local machine first. Then drop the programmer hat and put on the deployment hat 100% cause it's a b!tch configuring deployment environment for Tomcat configurations, Blaze DS, Mongo's failover servers, load balancers and all kinds of non-programming tasks. You will want to work your development stack close to home so you can diagnose quickly.
Cloud business is great only when you want 1) Not use your home PC and bandwidth as a server 2) You want to have global mirror points to your application so that user's latency in one area of the world is not slower than another part of the world 3) You want to distribute computing load burden on one application across many instances of the same application.
Clouds are relatively cheap to deploy but if you got an application that hording GB's of bandwidth and storage, be prepared to fork over $1000's+ in costs. You can save money by going with an OS with no licensing costs to get a better rate.

Google AppEngine database

I've been reading a little about Google's AppEngine that provides application hosting. I've been trying it out as I think it looks quite interesting but I'm a bit concerned about the database part.
Say I'm developing my Java app locally. I don't want to deploy to Google every time I make change to the code, so I setup a nice little Servlet container on my development machine to test things easily. With AppEngine you store things using their datastore API, which basically lets you model your data using Java objects - which is nice.
However, it seems like this data is embedded in the application code itself (inside the .war that is deployed to Google). Can I simply use their datastore api locally? How will it be stored on my local machine? Is this all handled by them so that I just have to worry about using the datastore API and when I deploy it to Google the data will just be stored in a different way than how it's stored on my local machine?
I'm just a little confused because I'm used to having the data part layered out of my application code.
I hope I'm clear enough. Thanks.
Development datastore and Production datastore are two different and separated things:
Development datastore is tipically a file based datastore named local_db.bin that it's just useful to store your data in your testing environment; the data is not replicated to the production environment when you deploy your application.
This kind of datastore is meant to be used with a fairly small number of entities and its performance has nothing to do with the powerful Production datastore beast based on Big Table.
All you need to do is to use the Datastore API that creates a level of abstraction between your code and the underlying datastore; in testing your data will be stored in the local datastore file, in production the created data will be saved to the Google App Engine datastore with all the features and limitations that this implies.

Categories

Resources