my problem's a bit complicated. basically i created a client/server CMS architecture that worked very well for a while. now that there are more customers, it's getting very slow and i don't really know how to fix it.
let me explain you the current architecture:
i've developed a content management system to serve various different customers. there's a cms server where each customer has an account to manage the content of his or her website. all customers work on the same interface and store the content in the same database on the cms server. so, for every new customer, i just have to open up a new account on the cms server and they can start managing their content.
to display that content, i have to create a customized website for each customer. that website frontend can run on one of my servers or the customer can host it himself. this frontend now has to connect to the cms server to fetch the content.
on the cms server, there's a php file called "share.php". it allows you to add some parameters such as 'content_ID' to specify the content. the php file then displays that content in JSON format.
on the frontend, i use file_get_contents("{cms_server}/share.php?content_ID=34"); to retrieve the data from the cms server.
as i said, it worked very well for some time when there were few customers using that system. now however a page load lasts at least a few seconds and it's getting worse.
do i just need to increase performance on the cms server or does the concept of retrieving data with file_get_contents(); just suck big time? :D
i appreciate your recommendations of how to fix that problem.
cheers.
Probably you need to look at your database: do you need to add indexes? Are you making redundant calls? Are you making many small SELECTs which could be made into one big one? And so forth.
Related
I am a begginer when it gets to back-end development.
I already have a front and website (html cuss javascript) and I am considering to make an app version of my website.
My website is a multi category blog.
I had a problem of understanding how can I connect a server to my website AND my native app. I know basics of php.
I read articles and q/as , all I could understand is that mobile apps and website use seperate server.
Web server and application server
-- -- is there a way to make a server for both, or is it better to use seperate servers?
-- -- if I use seperate servers for seperate platforms how do I make them show same content without changing it on both servers ( one database for two?)
-- --I heard about a system of creating a main database and a copy of it . Then I sync the copy to the main. How do I do that.
-- -- are there any doc's I can read on this subjects:
1) server for all platforms
(browser,ios app, android app)
2)databse system for seperate servers
From my general experience and the most basic solution, you have a single server in the backend which houses the database as well as the code required to fetch data from the database and supply it.
For example assume that you wrote a function called fetch all users that fetches users from the db and gives back a list of users as its results.
Now irrespective of which platform you are on, you would be able to call that function fetch users and get the data back, if you're on a mobile app, you would need to make an http request to that function, if you're on the web ie, front end you would be making an ajax request. So yes all your code is in one place in the backend. You do not need to make 2 servers for 2 different platforms.
P.S. when you code for the backend use a framework.
Let me start with a bit of background: I'm helping a non-profit organization that would like to have a browser-based application that is backed by Salesforce, but has very specific requirements.
I see Salesforce has a REST API that we can call, so we can develop a standalone application to serve the web pages they want and use the REST API to call Salesforce when needed.
I'm wondering if there is a way to host a web application directly on Salesforce; this way we don't have to have a separate application server. Any recommendations or pointers to documentation/open source products is greatly appreciated.
Yes, you can create services that will allow your app to hit Salesforce
Depending on the type of application, yes you can host it on salesforce using the Salesforce Sites feature, also you can develop and host your app on Heroku which is owned by salesforce and can sync data to and from salesforce using Heroku Connect, or you can build and host it on another service like AWS and connect via the REST API. You just need to investigate and choose the option that best fits your use-case. One thing to be aware of is that there are API limits (the number of calls you can make to salesforce in a rolling 24hr period). Depending the the needs of the app be sure to see if those limits will be an issue. Because if the app makes constant calls to salesforce that could be an issue. But there are things you can do to get around that, like caching.
Yes, both Force.com Sites and Site.com features allow you to host webpages on the Force.com Platform. The markup is stored in Visualforce Pages and can use Apex to access records in the Database. I have migrated multiple websites (including our company's www.mkpartners.com) to Force.com using Force.com Sites.
One thing to keep in mind is that you are limited to 500,000 views per month and the rendering of a page with images that are also stored on the platform will incur a single view for the page and a single view for each image. If you already have a very popular website, I wouldn't migrate. If you're a small business or nonprofit, then it should be fine.
Another thing to keep in mind is that dynamic functionality based on records in the database will not work during maintenance windows. There is the ability to upload a static version of your website to be rendered during these windows though.
In Sitecore you basically have three databases. The Core, Master and Web database.
Simply put the Core database holds all Sitecore settings. The Master database is the authoring database. So it contains all versions of any content.
Then in Sitecore you can "publish" the contents and it will publish the latest version of each content to the Web database.
So suppose I have a website with a news page. And a user is able to edit a news item from the web site (so not through the CMS). How would the database then get updated when it's set up like this?
It would probably update the Web database, but then when I go into the CMS I don't see the latest changes, since the CMS reads from the Master database, right?
So does that mean that it should write twice? Once to the Web database and once to the Master database?
Can anyone tell me how this works in Sitecore or the like?
The reason I'd like to know this is becasue I'm thinking of creating a similar database setup. And I'm just not sure how to solve this issue.
When you have items that needs to be updated by the website visitor, you need to use the SitecoreService SOAP webservice or create your own custom webservice that runs on the Master-instance and triggers a publish after updating.
Well, Sitecore has a publishing step. When the user publishes in Sitecore, it updates the Web database at that point. If you want to build a similar system, I would simply store all versions of an item in the Master database and only when the user chooses to publish, copy the latest version to the Web database.
If your site
- generates a lot of comments
- generates the comments continuously
- uses multiple content delivery servers
- requires CMS users to manage them
I would not store the comments as content items.
The reason is HTML cache and publishing behavior.
On high volume site you'd most certainly use html caching to achieve best possible performance. If a publish is required to show comments, you'd need frequent publish actions and thus html caches are cleared often.
You don't wan't that :-)
Modeling after the DMS implementation is the safest (not cheapest and Datatables isn't something I recommend these days), storing stuff in a separate database, possibly using queuing to prevent an overload if things get busy..
I feel very out of my depth with this query, but not being able to do it isn't really an option so I am going to have to learn how one way or another.
I have been tasked with building an application / database for a Chauffeur company. I have done similar things before in Microsoft Access for other customers, hence getting this request, but this customer wants to be able to run the app on their Mac, and not install Windows. My only real experience of coding is HTML/CSS and some VBA when using Microsoft Access. For these Access DBs I have created separate front and back end files to allow multi user access and also remote access (the back end file being kept on the company server).
So onto my query (apologies for dragging it out)...
I need to be able to build something that the single user can open and run on his Mac, so he can view, add, change jobs and their details. He also needs to have the same access on his iPad, although purely viewing would suffice.
As regards the web access, basically he wants to be able to go onto his "Booking System" application, go to "New Job" and send a link to his client, where they would click the link in a browser, fill in the details (Name, Contact Number, collection and drop off addresses, collection date and time etc...) and when they submit this form the details be updated on his booking system.
My issue is I do not really know where to start. I just need some pointers as to where to get started. Is it an issue of building a MySQL database back end and then hosting this somewhere and linking different front ends to it etc...
Yes, with multiple clients, the web is your best answer. For the cheapest hosting route, you can find good, inexpensive PHP and MySQL hosting that will provide what you need. You can design the front end with HTML/CSS, use PHP to develop the logic and data access, and use MySQL to host the data.
The Mac and iPad can access the application via the web URL--you will not be building an iOS app, rather the user will access the web site through a web browser. You can use some pretty neat tools like jQuery UI Mobile to create an app-like experience, but if you need to support multiple clients on a small budget, an iOS app and separate web site is not the way to go.
Make sure you have some PHP expertise available or figure this part out. There are tons of great resources on the web to get started. Good luck!
We want to add tracking statistics to a web application we are building but are pretty unsure of how to go about it. (i.e. clicks, pageviews, unique visits etc)
Does anyone have any articles on the best way to go about incorporating tracking data into an application ? i.e. javascript tracking or IIS etc ?
We want to add tracking in as a ASP.NET MVC module - but we are unsure as to the best way to actually get the data and essentially 'track' this information ?
If anyone could help out - much appreciated.
Edit: just to be clear, we want to do this in-house and present the stats to our users as an additional fee module?
You can turn on the logging for IIS and then use the SQL Server Report Server Pack for IIS. It comes with many canned reports for your sites stats and then you could take it from there with your own custom reports.
You could also just use log parser to get the stats into a SQL Server DB and then you could use SQL from their to analyse and roll your own app.
Either way, you could modularize this and sell it as an add-on to your customer base.
You could use Piwik, you just need PHP version 5.1.3 or greater and MySQL version 4.1 or greater. As they say in their website, "Piwik aims to be an open source alternative to Google Analytics."
They have a demo on the official website so you can see if it's what you're looking for.
Google analytics is a popular service. You just insert a bit of javascript on every page that contains your sites name and Google tracks the data and provides all the report on a handy web based dashboard.
It's not an ASP.net MVC module like what you mentioned, but it will certain track stats for you and will be a lot simpler to set up than trying to code or integrate anything yourselves.
I'd look at analytics to begin with and only branch out to something more complex if it doesn't meet your requirements.
klabranche provided a holistic answer in terms of using logs of web server. I think using web server log is a a great way to analyse data of your web application.
That being said, depend on your web application and the scope of your analytics, just relay on web server log is not a good way to.
As you may know, web log does not record users behaviors like clicking certain tabs which may not trigger a web server request. Obviously your web log has no idea whether users clicked that tab or not, this may hurt your analyse.
Another you need to know is browser cache, this may create another black hole in your data.
RECAP
If you want to do a holistic analytics, you need to use two approaches, one is JavaScrip tag, another one is web log. Since both of them have shortages, combining them together will give you a complete picture.
Hope this helps