what is bigtable. Is any authentication require to create table in bigtable.where the data will be store. it is possible to view the table. we can view all the tables in bigtable, which was created by others.
I'll take your several questions one at a time:
Bigtable is the system on which AppEngine's datastore is built. It is effectively a distributed hashtable.
Authentication is required in that you must have a Google Account; you must have signed up for AppEngine; you must have created an application within AppEngine. You application will be able to access the datastore, and if you are logged in to your application's Admin Console, you can use the Datastore Viewer to inspect the contents of your application's datastore.
The data will be stored on Google Servers.
There are no tables, per se, but you can use the Datastore Viewer to view entities that reside in your application's Datastore.
No, you can not ever view the Datastore's contents that were created by other applications. Each application's view of the Datastore is completely siloed and has no connection to that of other AppEngine applications.
Related
I'm quite new to Google App Engine and it's cloud Datastore which is used for storing the backend's data by default. As far as I realized you can only view it's content within the developer console and you can create or edit entities there.
But is there any external tool from which you can connect to your datastore to create reports or administer the data? What is your experience?
In fact yes it's true you can only see data's from the admin console.
If you wish to see your data's in Google Drive Table and make a report you can, but for that you need to create a connector to your sheet (I already made one). It's exactly the same if you need update or import data's to your datastore.
I use this Technic to upload or refresh products on my e-shop GAE app.
In general if I need to see a report, I design a specific web page for that and I protect theme via a login / password. To see a well formatted report you can use jquery library or use Google Charts
New in GAE development and have some question regarding extracting data.
I have an app that collects data from end users and data is stored in high availability datastore, and there is a need to send subset of data the app collected to business partners on a regular basis.
Here are my questions,
1. How can I backup data in the datastore on a regular basis, say daily incremental backup and weekly full backup?
2. what are the best practices to generate daily data dump files that can be downloaded or send to my partners in a secured approach. I expect few hundred MB data files everyday and eventually will be in few GB range.
3. Can my business partners be authenticated though basic HTTP auth, or have to use OAuth?
Google is in effect backing up your data by storing it in multiple data centres.
You can however use the bulk loader if desired and back it up manually:
Uploading and Downloading Data
You can authenticate users however you choose, it's totally up to you. The "users" service is integrated into app engine directly however so if everybody has or could have google accounts that's even easier for you to use.
The users service
Due to the size of your files unless you want to piece them together from the datastore you'll have to use something else, as the datastore has a 1MB limit per model. It's perfectly possible to do that however.
But you should probably look at The Google Cloud Storage API instead as there are no file size limits.
I want to create application with consists of Desktop application and google cloud storage. So, each my client should have separate cloud storage. Does google provide such thing?
More info.
Because I do not know what can offer google app engine i wrote this question.
I need some database hosting for my desktop application. In future I think I will switch to GWT and app engine. I want to sell my application so each my client can't access my other client databases. I was thinking that would be safer if each client will have data in a separate database so I can't do some mistakes in code.
You can separate data in the datastore using namespaces on google app engine:
https://developers.google.com/appengine/docs/java/multitenancy/multitenancy
It's up to you to decide how to implement the namespaces. You can separate them out by your user authentication system.
You can create a folder per client and restrict the folder access to the user (works only with Google Accounts) or your can do the same with buckets, create a bucket per user (which might be an overhead if you have a lot of users).
For database AppEngine datastore has the ability to separate the data by namespaces. this doen't require any user account and its your responsibility to select with which namespace to work with per request.
You can use GAE namespace capability as pointed above by #dragonx without Google authentication.
Use a client name as a namespace identifier (needs to be unique) . How you fetch this client name is upto you. It can be stored in GAE itself if you wish or can be deciphered from the url used specific to a client.
Do have a look at the GAE multitenancy link https://developers.google.com/appengine/docs/java/multitenancy/multitenancy
The example here can be easily adapted to use any string identifier per client.
I have an app which was facing recurring server errors when on M/S datastore and have since migrated to HR datastore. The old application was aliased to redirect users to the new app and all is well for the new app and my users.
Now, I am trying to delete the old data in the M/S datastore, so that I can disable billing for the old application, but finding it difficult due to the following reasons :
The Datastore Admin cannot be enabled because the application has been aliased.
The Datastore Viewer throws up Server Errors -- possibly because
the viewer page is trying to load the list of all entities in the database and fails in the process because of the large number of entities in my app (the app is a meta-data driven multi-tenant online database application, with entities added dynamically and hence has more entities than the typical Google App Engine application) (or)
due to the unreliable M/S datastore (or)
a combination of both (or)
other issues
The remote_api is not working out because the request is likely redirected to the new application.
I have already removed almost all composite indexes and vacuumed them to reduce the size to an extent. Most of the current usage is for built-in indexes, as shown in the latest Datastore statistics below :
Entities Built-in Indexes Composite Indexes Total
Total Size: 189 MBytes 1 GByte 3 MBytes 1 GByte
Entry Count: 203,793 9,506,340 20,797
The total storage used is around 1.27 GB and I can safely assume the entity which is taking up most of the storage. If I am able to delete records from those couple of entities, my datastore will fall within the 1 GB free quota.
Resource Usage Billable Price Cost
Datastore Stored Data 1.27 GBytes 0.27 $0.008/ GByte-day $0.01
I do not want to fully delete the old-application as I have users already mapping the application to their Google Apps domain and the alias to the new application helps.
Would like to hear suggestions on how I can possibly delete the data from this old M/S datastore, of my now aliased application.
You should be able to disable the application (and billing) without deleting your data.
I'm building an application on Google App Engine that uses the datastore to store information about the current state of the server. When an Android device queries the server, a servlet gets an Entity from the datastore, modifies it, and puts it back into the datastore to update the datastore entry.
However, sometimes while one instance of the servlet has gotten the data from the datastore, another instance of the servlet does the same before the first instance puts updated data back in. This is causing synchronization issues in my application.
Is there any way to "lock" the datastore so that nothing can operate on it until the lock is released?
Thanks.
Transactions are what you're after.
Read the docs carefully though: there are strict limitations on what you can do within a transaction. Specifically, you can only query within a single entity group - that is, the set of entities with the same ancestor.