I need to make a decision but just want to get more idea about what to do. Below is my scnario:
We are building a website which will be host in azure using EpiServer. Based on requirement we need to build a data entry section and user enter their own datas. Users belong to different companies so each user can only manipulate/see their own company data. The size of data is quite large (more than 10,000). I have couple of choices here
1. Using EpiServer page. So each entry is a page and build the data entry pages myself to make sure user's of company just see their own data. Users should not see anything about EpiServer so I can't use Edit Page function in EpiSErver.
a. I don't need any extra table
b. I can re-use EpiServer API so there is no use to build DbContext and layers
a. Too many data and too many pages
b. Admin section would be slow (we tried this and user was frustrated!)
c. Eventually these data would be shown on some pages as a grid. So on each page there would be around 100 of them to show and user can search, change the category and the result was really slow.
d. On UI we need to group the row and show them and grouping needs to fetch all pages and speed was really really slow.
2. Using EFF and CodeFirst and build admin section by myself.
a. The result is really fast
b. Admin was really happy with result and speed of data entry
a. This is Azure environment from EpiServer and I have no control over DB
b. I can't have second database so I stored my tables in EpiServer CMS DB which is bad. So the management of the DB is out of our control and any DB tranformation could have a potential of breaking our tables
3. Using Dynamic data from EpiServer
a. No need for new tables
b. Using EpiServer API's
a. Speed was really slow specially on groping the rows which means to fetch all data and group them!
b. Admin section is really slow and data entries takes an ages.
My decision till now is using EF and CodeFirst which was good till now but I'm not sure if this is a good decision for long term? Please give me your ideas.
For long term, I would suggest to use EF for better performance vs DDS. Stay away from using EPiServer page as data storage.
If you want to have all benefin from DDS, you could still use DDS with your own table instead of using default big table. Or one other way is to using DDS with serialized object stored in single field. Whenever you need your object, just get from DDS and deserialize to your object and work with that.
We have exactly same scenario and decided to go with EF after some performance/load test on all three solutions.
I agree with @Dzung Le.
@Aria, you are correct in saying that it is not best practice to modify or add tables to the EPiServer database, but because of your constraints it will have to do. I would still push for a second database though.
Dzunz Le ++Regards/K
Thanks so much for your feedback and hope this will not be a problem. Will let you know if I have update on this.