I have a moderately large rails ERP application having around 80 tables . I use MySQL . I recently received a client requirement which needs me to deploy the same application for roughly 10,000 offices(an instance for each office). The central office(superadmin office) must be able to view details from all these offices .
After talking with the client this is what i could come up with :
Configure the app for 10,000 offices , there will be some new models for the data that need to be accessed by the superadmin . The tables for these models will be in another database (superdamin_database,not the one used by a particular office) , to which data to be reported to super admin will be written
I intend to make another app that would connect to this superdamin_database to present the data to super admin .
So i will have 10000 app_databases and 1 superdamin_database
Where are my flaws in this plan ? What is the weakest point in this plan/structure that would render the application unusable due to a server load ? What is the rails way to do this .
Hope the experienced guys in here would give a thought into this .
Thanks in advance for your reply ,
Sam
if i understand your question correctly
I recently received a client
requirement which needs me to deploy
the same application for roughly
10,000 offices(an instance for each
office).
you are violating the basic rule of a web application. Host in one place and access from anywere. I'm not sure why you want to install each of your application instances in these offices instead have a one hosted system which can be access from any office.
having hosted your application in one place will make your life easy when it comes to maintenance and upgrades.
BTW how on earth you are going to install 10,000 applications ?!
My advice is
Have a one single web application and let it used by your client (in the mentioned offices) and have a good layered access control system so that you can control which data access by which user
by that way you dont want to do this
I intend to make another app that
would connect to this
superdamin_database to present the
data to super admin . So i will have
10000 app_databases and 1
superdamin_database
hope you got my idea,
cheers
sameera
Perhaps the concepts discussed at http://aac2009.confreaks.com/06-feb-2009-14-30-writing-multi-tenant-applications-in-rails-guy-naor.html will steer you in the right direction
Related
I am developing a CRM in Laravel and the following doubts came to me.
Client A will have access to 1 database + 5Gb of emails and Client B will also, but how should I organize this on my server?
Should I create a database called banco_a and another banco_b? Is there another way?
If anyone can give me a "north" of which would be the best way for this, I will be grateful.
Remembering that my application could reach 100 clients or 1000
According to your requirements you have to implement multi-tenancy system, ie architecture in which a single instance of a software application serves multiple customers, for detail read this article https://whatis.techtarget.com/definition/multi-tenancy,
In laravel there is package for multitenancy. https://laravel-tenancy.com, which is awesome in my knowledge.
I am tring to create an Access application.
I want the database (tables) to be online and the app (forms, reports) to be installed on each pc.
Is there any possible way to succeed this?
Will I need a dedicated server ?
Alternatively, is there any platform (free or not) that I can upload the whole Access app making it Web app?
I made a research and Sharepoint does not satisfy me at all.
Unfortunately, microsoft does not support Access web apps anymore.
Thanks in advance.
Your best and most low cost is SharePoint tables from an office 365 plan.
Remember, Access web publishing is NOT required if you migrate tables to SharePoint, and then place the front ends on each PC.
So even the most basic office 365 planes support SharePoint tables. (You don’t need Access web publishing for the SharePoint table feature). You one monthly plan of about $7 allows all 20 users to connect with the one account one $7 fee total for all 20 users.
You can’t use “files” like Access accDB ones over the internet with say OneDrive, or drop box etc. The reason for this is these web systems don’t support windows networking. So while you can pull a word file from such system, you cannot EDIT the file on that remote system. When you are done editing word, then you send the WHOLE file back up to the remote system and the word document is OVERWRITTEN.
Of course with Access, if each user were to OVERWRITE THE WHOLE file, then each user would thus always overwrite anything changed by any other user. So these systems do NOT support the ability to update ONLY BITS AND PARTS of the file. It is this “bits” and “parts” updating that allows two users to work at the same time and edit separate rows of data in the ONE file.
So Access is VERY different than the rest of office.
With word, or Excel, then you edit the document and then SAVE THE WHOLE document. That “saving” will thus overwrite the changes made by anyone else. So these “cloud” systems do NOT support the ability to only update “part” of the file – but only the WHOLE file.
Word, Excel etc. thus work on a “whole file” update model. However, Access requires the “special” ability of the windows file system that allows one to update ONLY PART of the file. And even more important is windows file system allows two people to update at the same time as long as they are updating “different” parts of the file.
What the above means is then you have to move the back end data file from a “file” based system to some kind of server database system. That means MySQL, SQL server, or SharePoint tables.
I made a research and Sharepoint does not satisfy me at all. Unfortunately, microsoft does not support Access web apps anymore.
I would not write off this choice. Access web publishing is NOT required for Access to use SharePoint tables. And that table option is VERY nice since such tables even work without the internet connection and will “sync” or “catch up” when you finally do get a decent internet connection. In other words this “sync” type of model is more like email then traditional links to a database.
This web based message system and technology is FAR BETTER than Access ODBC tables since “small” connection breaks that is common over the internet tends to make use of ODBC over the internet rather painful compared to SharePoint tables (they were built from the ground up with the internet in mind, while linked ODBC tables in Access were created 25 years ago, and they did not have the internet back then – so the design considerations of internet were not given to the ODBC choice.
I mean, you can make a car fly, but if you design the machine from the ground up as a plane as compared to a car, the result is a far better machine that flies. So there will be 100’s if not 1000’s of small choices made in the design of the product for its given intended use. So Access was around LONG before the internet – so most options don’t play nice over the internet. However the SharePoint table open is from the ground up based on internet connection technology – ones that often break, or even stop working.
I explain the table migration process to office 365 here:
https://youtu.be/3wdjYIby_b0?list=PL27E956A1537FE1C5
The other choice is to migrate the data to the Web hosting database system. Most web sites usually offer MySQL or SQL server as a database choice. However, ONE BIG detail is you have to find a web hosting provider that allows external ODBC connections. Today, less and less web hosting companies allow raw external connections to the database that drives the web site. (The reason of course is security).
So while say when you go to amazon to buy a book, the web site and web server system can pull information about books etc. from the database system. However, you on the outside cannot connect or link access to the database system that drives Amazon.
So while the web hosted server has full use of the database server, you as an external outside user (not from the web site) do not have such permissions.
So you need to find a provider that includes a database server, but in addition to allowing the web site to grab + pull data from database server, they also allow everyone on the planet who is connected to the wild and crazy internet to ALSO be able to connect to the database server (and by-pass the web site).
So as you can see, this is a big security risk because that database server now has to allow any crazy person on the internet to pull data from that database. I mean, I seen within say 5, or 10 minutes of opening up such database systems, you see 100’s if not 1000’s of logon attempts and people trying to link to your exposed tables! I mean, if all your users can link and see those tables, then so can the everyone else on the wild internet. So in a very short time automated bots will attempt to logon and link to those tables if they find someone crazy enough to “open” up their database system to allowing everyone to “link” or at least try to “link” to those tables.
So fewer and fewer web hosting companies allow external connections to the database that by-pass the web site. You need this by-pass the web site and go direct to database ability. The reason of course is Access is not connecting or linking to the web site, but needs to link DIRECTLY to the database system. (This thus has near nothing to do with the web site – you are to consume the database system, not the web system).
As noted, most simple is SharePoint and office 365. And this choice also has good performance WHEN the file sizes are limited and fit within the SharePoint table limits.
Another choice would be to purchase a monthly SQL Azure plan, and then again migrate your data from Access to SQL server. This setup will also work. They have a number of cool security features (you can restrict what IP address are allowed to connect for example).
Last but not least:
Your internet connection is about 10 times, or even 30 times slower than your normal office network. That means a typical wait time of say 3 seconds with your split application now on your office network will become a wait time of 30, or even 150 seconds if you connect over the internet (150 seconds = 2.5 minutes!!!!!).
This means you have to spend time optimizing the application for this setup. I explain this issue here:
http://www.kallal.ca//Wan/Wans.html
If you don't think this speed issue outlined in the above wans article does not apply to you then I suggest a re-reading it again and again until such time you realize this slower internet issue applies to you. Do the basic math - your internet connection will be 10 to 100 times slower then your cheap local office network. Do take more meds if you don't grasp this issue and don't think it applies to your case and use - it does.
One of the alternative options to Access Web App is PowerApps. It is one of the foremost suggestion to migrate Access Web Apps which is quite easy and powerful.
For my Windows phone project (it's a Universal app), I have a set up that has a country and a phone number in one of the page. There are about 7 other pages that requests the user for additional information. But for starters, let's just stick with the first one, that asks for the country and the phone number.
I read through a million posts in Stackoverflow and other websites alike, to know what database system is best to implement with the sort of app I am going to be developing, or hoping to develop.
Here're my findings:
Azure SQL: I have an Azure account and I can use the Azure SQL service to store the user-input data directly to the database (when the app goes live), or while in the testing phase. But I got to know that feature isn't really working well as windows phone cannot readily update the data to Azure SQL, on realtime basis. Is it so?
MySQL: I thought I'd create a local MySQL database, for testing purposes, so as I input the data (in the emulator perhaps), the database saves it. I am unsure how I can implement this. I can't find any article I can read that can help me with this. There are with ASP.net, but it isn't what I am going to be using.
SQLite: I know for a fact the data can be stored locally, by using SQLite, but I could like to know if the locally stored data can be later updated on a server-side machine (i'd prefer Azure SQL, but MySQL is also OK with me). If it can be, i wouldn't mind settling with it. If it can't, what can I do?
It all boils down to this: What's the easiest way to store data entered in a textbox (lol, yeah!) to a database (locally or server-side)?
Your efforts to help me will be greatly appreciated!
Thanks!
You can stay on Azure SQL if you have an account.
It works fine and it updates database on the go (sends json as far as I remember), so you shouldn't worry about data being stored in a cloud. Moreover, it is super-easy to use it for your needs (store data from textbox).
Azure SQL will get your bootstrap the fastest for your application. There is no need to deploy MySQL or SQLite and managing your DB. There should not be any concern about updating the DB live from the app.
We currently have an desktop application that is sold to small businesses and used as a server/client model application and we are in the early stages of researching the possibility of adding cloud-based syncing to the program.
Besides the obvious hurdles in transitioning/recoding the networking code of the program itself, there seem to be many additional questions related to the server/database selection, available cloud services, scalability, and more.
For example, currently the non-cloud application simply connects to a specified MySQL database file and then loads/views/updates data. This database can even be stored remotely on a server and accessed from multiple machines, for example:
db=New mySQLCommunityServer
db.host="12.23.56.57"
db.port=3306
db.databaseName="myData"
db.userName="userName"
db.Password="password1"
db.connect
But for a distributed cloud application, it would need to connect to a the same host and SQL database name but with each specific user's login and password and access their specific database and tables. Where would that translate into the code above?
A few questions arise:
Would a new entire database need to be created for each new user account that signs up?
If so, how would changes to table formatting be applied to all user databases. Assuming roughly 500-1000 users signup, having 500-1000 separate databases doesn't make much sense.
Would this be better accomplished using a service such as Amazon Web Services? Even there, it was a bit unclear how the "program user account" would translate onto their services.
Thank you for any feedback!
I am working on an application which acts as a setup box for other child applications. I want to set up child applications from one central parent application. Set up includes database setup (db:create and db:migrate), subdomain set up etc for child apps.
This is going to work like this: a Subscriber will subscribe many applications. On subscription the application will be configured to work on subscribers provided subdomain (on my site). Every instance of a subscribed application will have its own database. So I need to set up database for each subscriber, and domain name too.
Currently I am creating database based on child application subdomain, using ActiveRecord::Base.connection.execute.
After creation of the database I want to load the schema of the child app to the database created. For this I had posted a question here
schema.sql not creating even after setting schema_format = :sql
Is there any good efficient method/approach that will help me?
Also I am a bit confused about subdomaining how its gonna be work?
Any help/thought appreciated...
Thanks,
Pravin
Since there is no real need for a separate database for each user and for each 'app', you may want to check out a term called multi tenant.
Also, subdomains can be handled in rails 3 and use something called Devise for User authentication. Github has a rails 3 sudomain devise authentication fork to get you started.
Until you really see a need for all these databases, keep it simple. One database per application, and connect to each application via Active Resource.
Be warned, that what you are undertaking can confuse even a hardened app builder, so i hope your experience begets that of which your current Stackoverflow rate is at.
All the best.