iOS, which database to choose? - iphone

i need some advice.
I am developing an iPhone application (later for Android also) using some social network users. I need to store some data in a database online.
Better to use MySQL with XML or directly use SQLite?
I want performance and stability, and if all goes as I think I might have to handle 500,000 users or more.
I studied a lot about databases, but I would not even take care of his administration, because I'm alone.
Most web services do not support SQLite, but MySQL only.
Can anyone give me some advice with justified?
Thank you to entire community.
Bye, Eros.

Is the database going to run on the device (iPhone/Android) or in the server? In the device both iPhone and Android have good support for running SQLite as an embedded database. If you are thinking server side it doesn't really matter in terms of compatibility since most likely you will add a application layer that is easy to make compatible.

Related

Is CocuchDB/TouchDB designed to serve offline/online setup for ios apps?

I am in little bit confusion because of my less understanding about CouchDB. Let me explain in simple words. I am developing an iphone app for which my client may ask for android version. I am using CouchDB as data storage for this application.
We designed a backend from where admin can setup/update information. ALL updated information should be replicated to all iphone device. When I say replicate from server to device I does not mean replication from one iphone device to another. Means source of updated always will be server.
My client also wants that most of the functionality if possible should work offline. To make some of the functionality offline client asked me to use CouchDB and TouchDB(on iphone) which will be synch up automatically.
According to me CouchDB is not designed to serve this purpose but designed for replication which is required for distributed computing where source of data is not one server but multiple.
Using CouchDB/TouchDB I am facing lot of issues. One of the big issue is my logic and UI implementation are together built on my xcode. If tomorrow I want to develop Android application then again I have to implement same logic in android syntax. Change in logic needs update both versions. More frustrating if client wants to develop windows and BB version tomorrow.
To avoid this I can suggest my client we should use 3-tier architecture where we will built one middle ware and we will keep our logic there. Only work we need to develop at app level is fetch data from middle ware via WebService and present UI.
But before suggesting to my client I want to confirm my idea from expertise. I might be wrong as I do not well knowledge about CouchDB and maybe CouchDb is only designed for offline/online setup.
Please waiting to here from expertise.
I'm working on something similar right now, so I can share what I've found.
We're using BigCouch (a fork of CouchDB managed by Cloudant that provides a cluster of Couch machines) to store our data and then using TouchDB for iOS to replicate data down to mobile devices.
We've been able to get TouchDB working with BigCouch, but it hasn't been without a few bumps in the road. TouchDB takes advantage of the existing replication functionality built into CouchDB and handles it well.
From my experience TouchDB also works very well in offline mode. The replication will pick up where it left off when the device went offline. You can also configure Touch to do pushes, pulls - or both, so that's nice.
The real issue is when you want to move to Android. The TouchDB Java port is in a sorry state right now. It exists, but it's not ready for production. In fact I saw on Twitter just this week that they're trying to hire someone to take over the project.
Even if the Java port of TouchDB was ready for production, you're right, you'd have to re-write the code for Android. Then again this would be the case no matter what technology you use.

Remote MS SQL or MySQL Database on iOS

I currently have a website that uses MS SQL and I am interested in creating an iOS client for that website. I would the app to connect to a remote SQL database that is hosted on my website and then I could pull information from that database and display it locally on the device. I would like to also publish information to the database. I am open to use MySQL.
Is this possible and if so does anyone know of any good tutorials that I could check out?
I'd highly recommend placing a thin web layer between your database and your iOS client. You don't want iOS apps connecting directly to your database (unless this is for your own personal use for limited to a handful of people you really trust).
You could write the web layer in PHP (or whatever you fancy). At that point you can use HTTP and JSON between your iOS app and your database.
Put a web service between the phone and the DB.
There are two options :
You can develop webservices/scripts or whatever server side solution that will make your database talk "publicly"
Use a third-party library (like this) that will make your app communicate with the MySQL database.

How & where to set up DB Server and communicate with iPhone

I'm working on iPhone app that will let users upload/download photos to/from a DB server along with some data associated with each photo.
While I do have experience with iPhone programing, I do not have much experience with DB and server side programing.
Does anyone have any tips on what would be the easiest way to set up DB server and handle requests and responses coming from the iPhone. This server may be potentially required to handle large amount of traffic and preserve data integrity. Several iPhone users might be attempting to upload and modify data associated with each photo at the same time.
I'm thinking of opening a hosted server account so I don't have to purchase hardware and run it from home. Any tips on a company that provides quality and affordable server and DB hosting would be much appreciated.
If you know some Python or Java, you could take a look at Google AppEngine.
It is designed to scale and the entry costs are very low (i.e. free).
You do not have to worry about any infrastructure hosting as it is all provided for you.
The only catch is that it is:
Harder to get data out of the platform if you decided to move off it to another system
Does not support push notifications (However there are a lot of push notification providers out there you can hire)

How do I write a desktop application that syncs with the iPhone?

For example, how would I write a program like senuti? Are there any libraries I can use for this? It would be ideal if I could do this in Python or .Net, but I'm open to other things as well.
There are three things you can do:
Add some code to your iPhone application which acts as some kind of server (http, SMB, etc). Then your mac/windows full client application can connect to this server over wifi. This is safe and reliable, but unfortunately the app will have to be running on the iPhone at the time of sync.
Sync to the "cloud". EG: Have your iPhone app save some data to a web server on the internet (you could use amazon EC2, windows Azure, or even just a PHP script running on a cheap hosting account), and then have your windows/mac client also connect to this web server to retrieve the data. This is the most user-friendly, but it requires you to pay for the hosting of the web server, and will be unsuitable for large amounts of data
Violate the EULA and try to reverse engineer the way iTunes communicates with the iPhone.
This is how senuti works, but I wouldn't recommend it, as they're constantly having to play catchup with apple changing the format underneath them, and they are probably exposed to some kind of legal action, if apple ever bothered to sue them.
i believe Version 3.0 will resolve this as it allows you to program apps to the USB interface. check out some of the documentation for that in the External Accessory framework.
it would still require the app to be open, so essentially would mean two syncs (or more if you have multiple apps)
There is no legal / official way of doing this. Creating a program that would sync with an iPhone would violate the EULA you agree to when using the iPhone and iTunes.
Not only is it illegal, but it's also impossible to do this reliably. Apple could break the method at any time without any notice, and it would pretty much be a cat-and-mouse game.
I only know of one application that something of the kind, and it is the iToner application which synchronizes ringtones.

Can the iPhone only use an SQLite database?

Can the iPhone use other databases besides SQLite, like MySQL?
The iPhone can only use SQLite as a database, directly on the device. This means there is no MySQL server inside the iPhone. But you can, and are free to have (your own) MySQL Back-end server, to which iPhone applications connect to. But Apple doesn't provide the server, so you have to pay the maintenance costs
Not true any more!
The Raima RDM Embedded database SDK will also work on the iPhone. It's cool because it supports the network and relational models, and you can do things like having direct pointers to records for faster access.
They have an official port coming, but their version for Mac works in the iPhone Simulator.
raima.com/iphone
SQLite is installed on all iPhones. Theoretically, you can run other databases but since you cannot start other processes, you cannot run MySQL -- MySQL requires a separate process (the mysqld daemon).