New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Custom Order Table (Woocommerce Scaling) #30228
Comments
+1 👍🏻 |
Sure, except re-filing these duplicate issues is mostly a waste of everyone's time. Everything that has been said and can be said about this, admittedly important, topic is filed at liquidweb/woocommerce-custom-orders-table#183 Only things that can move this forward are:
|
At minimum, this is a duplicate of #30078 which is still open. |
With respect, the major waste of time is the WooCommerce core development team's failure to deliver upon their responsibility to deliver this feature in a timely fashion. This has been a huge management and process failure, and it should be something that the community receives regular updates on rather than simply silence and vague generalisations. All over the world, since 2015, WooCommerce store owners have burned thousands of hours on investigating and implementing work-arounds for the performance problems that come up once you reach a certain size. If users feel the need to express their frustration over that situation, that's very understandable. The idea that Automattic lack the financial resources to see this through is absurd. As someone who's sold a lot of WooCommerce-related products, I don't say this lightly or without consideration. What has been lacking on this matter has been project leadership and responsibility. |
I think we're all in agreement on this. Yet, filing these duplicate issues probably won't do anything to further the cause. |
Hi @erikdemarco, Thank you for opening the issue! It requires further feedback from the WooCommerce Core team. I am adding the Please note it may take a few days for them to get to this issue. Thank you for your patience. |
Hi @erikdemarco. We are actively planing to adopt a custom tables based approach, but we need to make sure that the implemented solution doesn't break any existing shops and thus it'll take some time. |
Hi all. This is fair criticism and thanks for pushing us towards a better WooCommerce we can all use effortlessly. We have been focused on improving performance and delivered various changes that sped up WC core, most notably different lookup tables that speed up the costliest actions done on products and orders. We'd love to bring you custom tables, but the problem is that lots of plugins that integrate with WC are still not using the db abstractions, and that means we can't roll them out without causing significant breakage to peoples' shops. We have been hearing the same voices, on the one side people asking for custom tables, but on the other side also experts saying WC can scale and it's mostly other plugins adding more unoptimized queries are dragging the sites down. Thus our evaluation between breaking a lot of stores vs adding some performance just didn't seem like a reasonable tradeoff. In addition, we also don't want to promise things we can't deliver, so that is why we've been reluctant to give specific answers to this question. With all that being said, we are not abandoning this idea as we still think it makes sense from multiple perspectives. I will close the issue for now, but will update you folks here when we have some news. Hope you understand. |
@peterfabian : A simple CHOICE to users would have been a better approach! Choose between Custom Order Table vs Broken plugins. Serious plugin authors would EMBRACE this change while others would abandon ship! Such instances forces one to evaluate the difference between mediocrity and excellence! |
For me, this is all very disappointing. It's simple programatically to hook into the WPDB layer, detect which plugins are using the wrong approach, and stick a big warning on the dashboard so that store owners and plugin developers finally see a reason to act. It is understandable that after 5 years there might be ones who still don't believe that they need to act because nothing is going to happen.... how can we conclude that proving them right was the right response all along? Should bad plugins really be awarded a permanent veto on improvements? The juxtaposition between "people asking" and "experts saying".... ug. If the WooCommerce team don't know where in the core code inefficient SQL queries caused by the posts/postmeta split is, and think it's only bad plugins that do them... I don't know what to say to this. On your stores with hundreds of thousands of orders, how many rows do you get in the monstrous join created by |
@peterfabian I think woocommerce team should now be focus on performance. Instead of adding more and more bloat features. All this additional feature making it more and more complicated to integrate order table. As a result its very unlikely we will see this feature added in our lifetime. |
@peterfabian thank you very much for responding to this ticket and explaining the situation. EDD went the way with reworking the plugin into custom tables and i definately liked the approach.
A solution like @DavidAnderson684 suggests to show a early warning already will lead to a lot users messaging their plugin authors to change the way their plugin works. Same worked also with the JQUERY Migrate Solution and a very very old jquery version was able to be moved to a newer solution.
Its really time to focus on this and invest the needed time to preinform plugin authors / users of woocommerce so they have enough time to get compliant. Then to roll it out step by step. Thanks for all efforts and discussion of this important topic. |
+1 "We are actively planing to adopt a custom tables based approach, but we need to make sure that the implemented solution doesn't break any existing shops and thus it'll take some time" @peterfabian YES ! Close this issue and let's hope that nobody talks about it within the next 5 years ? Exactly what all the cheaters and scammers politician do ! Are you in politics soon ? BLA BLA BLA BLA.... BLA BLA BLA BLA.... BLA BLA BLA BLA.... BLA BLA BLA BLA.... |
This is a real shame. Shopify scales out of the box. The woo leadership is a failure in this regard, with "backward compatibility" argument. Guess what, if you did not start using CRUD since 3.0, 6 fucking years ago then that is on you. Why are you prioritising the users who do not care about their store at all? Those should not update that is the end of story. What is the priority? Building the most mediocre solution possible? You have the resources, with focused efforts both custom tables could be done is 4-6 months - since almost all is already developed, you should just wrap this up. I cannot count how many serious store owners hate Woo just because of performance bottlenecks. |
Hi, I understand your frustration, it's been a long time, and not much progress on the custom tables. However, there has been a lot of resources put into improving the onboarding, analytics, enabling customization via blocks, making it easy to manage shipping and payments, building the testing and release foundation so that we can ship the plugin consistently without breaking stores as much as possible. Why these instead of custom tables? Because they seemed like a higher priority from the product perspective. We are also hiring as quickly as we can to scale our ability to deliver improvements to you. We hear you and appreciate your feedback. I wasn't trying to juxtapose people vs experts, apologies it sounded like that. What I wanted to say was that we hear feedback from multiple sources and use it as one of the inputs to our product decisions, together with feedback from our partners, internal users, user research, etc. And if user research says people can't figure out how to get their store up and running, we need to dedicate resources to improve the experience. Regarding the WordPress performance initiative: thanks for bringing this up, we plan to to join the effort and use this as an opportunity to improve WC, too.
Thanks for being constructive, that is exactly the type of feedback that is valuable to us. While we have a large shop that has a lot of data in it, it doesn't face live traffic and we don't use it to fulfill orders, so while there are some scenarios we run using our e2e test, etc, it's still useful to know where you folks struggle with performance in the real world. I tend to agree that this is chicken and egg problem---plugins haven't updated to use the db abstraction, because WC haven't pushed custom tables and WC haven't pushed custom tables because plugins haven't updated to use the abstraction. The only way to break this cycle is if we push it deliberately, with a clear plan and roadmap towards the custom tables. I'd like us to work on that in the coming months. |
This may sound pathetic, but you guys are building a house on sand. All the latest updates are clearly showing that Admin and Blocks are getting way more resources than WC core. The problem is that both Admin and Blocks do not solve any real problems, Blocks functionality is easily achieved through using 3rd party themes and as for Admin, all those reports are nice to have but it's not a must. In the meantime WC core has been hoarding problems over years and is lagging beyond Shopify every year. And these problems are difficult to solve by shop owners themselves because they are connected to WC architecture and tweeking it can cause a lot of troubles constantly sucking resources. Beside outdated table structure there are a lot of other problems with WC core:
Of course all these features are implemented through plugins which was justifiable years ago, but now in 2021 these features are expected out of the box. And what's worse most of these features when implemented through plugins lead to a need for custom solutions when you're integrating your WC store with some cloud services. The ECommerce has changed, everybody is selling on multiple channels, using multiple warehouses, dropshipping, etc., so easy integrations are a must. Just compare how many actions are available for WC and Shopify in Zapier and Integromat. Shopify has 2-3 times more because it has standard implementations while in WC some basic functionality is still in plugin territory. My SaaS inventory management platform sends tracking information to WC as order notes just because there's no built-in tracking implementation, listing products to WC leads to variations having only one image and syncing stock from multiple warehouses is not even planned because it's not in the core, etc. |
If you are really worried about breaking so many sites due to developers not writing their plugins properly, why can you do what WordPress itself did with jQuery migrate? Make a helper plugin for those with broken sites and give plugin developers 6 months to fix their problems. Also, for me and I'm sure many, having separate tables doesn't only benefit perform, but also allows you to backup/restore/migrate active stores much easier. |
Yes, separating orders from the WP posts table is very important for backup/restore, and also for having a proper live/staging/development split. Every shop owner, whether big or small, is affected by that one. Currently you can't just clone your site, make some changes, and then merge back the other tables, because orders, products, pages, posts and all other sorts of content are all blended together in the post/postmeta tables. So most people end up using their development sites to practise their changes, and then they do them a second time on the live. |
Showing my support, a repost from Reddit I think it's great this topic has gained attention, after some research this issue seems to be dismissed very quickly. I currently run multiple WooCommerce stores, but this is the pinnacle of WooCommerce's issue. As my clients grow, I constantly have to consider when it's time to switch them across to Shopify. It's interesting to read WooCommerce Custom Product Tables Beta and see how excited the team was to address this, and noting that it would dramatically improve the platform. I know of all the workarounds to create an AWS environment to better scale the platform, but WooCommerce seems to always need a bandaid or multiple to compete with what Shopify can offer straight out of the box. Why would I spend a considerable amount of billable hours with a client when I could easily avoid it with Shopify? We all know WooCommerce has its pros, when it shines, it shines. The custom themes I have created are always enough of a reason to stay put until the final day of when a client will deal with their store slowing down. |
I felt like I had to comment on these issues for today's WC marketing blog article https://woocommerce.com/posts/can-woocommerce-stores-scale-truth-about-large-stores-with-examples/ "Truth", really? Not the whole truth, for sure, as far as I can tell. Comment is still in moderation, but here's the text
|
I'm glad to see more and more people commenting on this topic, hopefully, at some point, WC will realise it's a massive missing feature. I get why WC goes for all the fancy features vs custom order and product tables. The fancy features drive more store owners and they drive more revenue. Realistically, the vast majority of WC stores are small ones where they won't have (or notice) the performance degradation and will not have the skills to do anything about them. Larger stores will struggle but will probably have the revenue to spend on servers and/or developers to try and fix the issues. I agree, WC is scalable to a certain degree and there are many ways to improve performance (caching, redis, etc) and yes, it can scale for a tiny business that's grown to become small and I think that's the audience meant to read the blog post. For anyone who works with a large site, the blog post is simply an insult. It's a constant battle to ensure the site is fast (on non-cached pages), ensure our conversions aren't affected and we don't end up spending thousands on hosting. It's also a struggle to fend off requests to migrate to Shopify. Why spend thousands on hosting, security, server management and fixing bugs when you can spend the same amount on Shopify and have fewer worries (and someone to blame when things go south)? Two reasons are features and extendability, but that's not always a tangible metric, compared to the loss of sales due to an outage, slow pages, and hosting costs. Are those enough to make me pick WC when setting up the next business? I get why WC doesn't want to touch this issue. there's a lot that can break, especially on crappy plugins (some on woocommerce.com), but as people mentioned before, other big changes happened (bump PHP, MySQL, WP, jQuery versions) and WP/WC came out stronger. @peterfabian rather than closing this bug outright, why can't we work towards the first step and break the chicken-and-egg situation? As David suggested above all it takes is
What's the worst it can happen? Nothing will break and you can phrase the message so it doesn't scare store owners onto Shopify. Something along the lines of "We noticed some of the plugins you use do not adhere to our best practices and prevent WC from releasing some new and exciting features. Please reach out to the developers of X plugin and ask them to start using CRUD. If you don't hear back from them, please let us know" . You can even keep track of the "bad" plugins via WC tracking. Between the 14 participants on this thread, I'm sure we can make a PR for this? Once that's done and live, we'll see how many plugins are really affected and if that's a real blocking issue or a perceived one (doubt you have real numbers at the moment?). Also, you mentioned a lack of resources. I've suggested a few times in the past that If money is the issue (doubt it) people who want those plugins can fund them. You can estimate the cost and set a gofundme page. Anyone who thinks that's a big issue can pay you to get a dedicated team working on those. If WC becomes 20% (random number) more efficient thanks to those, that's 20% less hosting costs, more traffic and sales and for a big store, that translates to tens of thousands.
Does WC hold a list of Big Stores (say hundreds of thousands of users/orders) when WC tracking is off? Is there a place where large store owners can register so you can reach out for feedback on issues you can't reproduce? Maybe an invitation-only slack channel or something where we can exchange information and best practices without the "noise" of low-level devs and salespeople who make unsubstantiated claims? It's likely that our site runs better than most in some areas, yet lacks improvements other large stores have. |
Lots of good ideas and thoughts here. Thanks all for sharing. We really appreciate it and would love to use your help when testing the upcoming solutions for custom tables. @glagonikas, I agree, let's keep this open and track the progress here. |
Thanks @peterfabian! What are your thoughts on adding the notice/warning proposed by @DavidAnderson684 ? Is this something we can send a PR for or it needs further discussion/specs? |
@glagonikas I think that's a good first step to have it, as it encourages everyone to use good practices. We'd be happy to review such PR, and we can discuss the details in the PR itself, I think. |
@peterfabian I love the sound of this! |
Concerning a dashboard notice for alerting if a plugin is editing order-related post/postmeta data without going through the Woo API, I think it could be done in the following way (sadly I am very short of time, but this may help someone who has the time):
The above suggestion implies that it'd be best to introduce a new table with fields for time (of most recent stack trace), number of occurrences (of that stack trace) and the stack trace itself, to store this data. The above just deals with postmeta, going through the WP postmeta API. Of course, plugins might also operate on the posts table. But surely if they are going directly to the DB, then they'll touch postmeta at some point - it'd be very unlikely that they use the WP API for the post object, but the WC API for the postmeta one. And of course, in theory they might also be doing the WPDB::query() calls directly and skipping the postmeta API too. But this is also pretty unlikely. And the above scheme could also be extended to trap those via the |
FYI: https://developer.woocommerce.com/2022/01/17/the-plan-for-the-woocommerce-custom-order-table/ |
Great to see this getting attention! |
Hello, great news! It would be good to add to the order table - billing phone
|
Just a request before you push even the first version of this live - please ensure total compatibility with your own subscriptions and memberships add-ons. |
As someone who moved over to Shopify Plus a few years ago from a non-Wordpress platform (ZenCart), the reason we opted for it is because they have much tighter integrations with key ecom needs. Reports are all built right in. Many integrations are built into the platform rather than being nickel and dimed. The end-user experience (the people processing the orders) is simply more refined, and this is where the clients spend 90% of their time. Yes, there are still third party apps, and custom development needed. You just get more bang for your buck out of the gate. But if you're doing millions per year, $24,000/year for Shopify+ is a rounding error and more than compensates for even just not having to manage hosting. Going with custom order tables is laudable, but it wouldn't have made any impact on our decision and very few other companies I've spoken to at ecom conferences. One other key benefits to Shopify is the significantly reduced rate of breaking changes. If developers and clients find this update difficult then there will be even more draw to Shopify. IMO spend 2x as long on QA and testing and automated migrations than actual development (eg. see request above for subscriptions+membership seamless migration). The current messaging and documentation I'm seeing reads like "well here's the guidelines for the plugins but we're not really concerned if they break": https://developer.woocommerce.com/2022/01/17/the-plan-for-the-woocommerce-custom-order-table/ Listing the extensions/plugins that are compatible will go a long way. If you have to, contact a few key clients and hand-hold them through the migration process at no cost so that you can see what they encounter in the real world. Edit: I also wouldn't use Alexa rank for this purpose. Ecom stores don't necessarily get a lot of TRAFFIC because purchase intent keywords have much lower volumes than information intent keywords. You can't glean conversion rate, average order value, profit margin or even social or email conversions off this. Totally unrelated. You can have an ecom store getting 1,000,000 visits per month doing $100 per year, or the same store doing $10,000,000 per year. IMO the much larger opportunity here is FBA businesses that don't even have a store and are at huge risk of being wiped out by Amazon. They're not building on woocommerce because its too complicated and they don't have the ability to acquire customers. Build in best practices for conversion optimization. Make the work flow as simple and close to Amazons as possible. Make it easier for them to attract customers. You're fighting with Shopify over 10% market share for a few clients when you should be focusing on how to get the other 90% of the pie, and growing the pie 200% by making things easier. |
@feastdesignco I'll have to disagree with a few of your points, because Shopify comes with hidden costs and/or limitations that simply increase the cost. The price of $24k is for their starting package of Shopify+ and states
For a website like ours that needs to support 20k+ orders in 10-20mins (during peak times) and contains over a million orders, Shopify wouldn't come that cheap. On top of those, we use Subscriptions, Composite Products, Product Bundles and Composite/Bundle subscriptions which don't come as standard on Shopify. There are plugins that can do some of those (for example Recharge) but they have a fee (higher than the equivalent WC one) and some (like Recharge) also have a per-transaction fee. Additionally, (correct me if I'm wrong) Shopify doesn't make it easy to change payment gateways and you have to pay a per-transaction fee, which is on top of the Recharge fee? I know there are bigger stores than us in WC but I doubt you'll find thousands at this size. I also understand WC needs to target the smaller stores to remain profitable, BUT how do you promote trust to the WC brand if you don't have big brands using it? Why would a small store owner (who frankly doesn't know and doesn't care about coding and optimisations) go for WC when all his competitors run on Shopify? As it stands, I'm having to defend our decision to build the site on WC originally and keep using it. It has served us good so far, but we had a lot of blood sweat and tears, even at early stages, because of bad performance. It's not acceptable to have to pay thousands on hosting per month to support a busy e-commerce site. With the right table structure, you can achieve this with much fewer resources and I'm pretty sure Shopify has a much better structure. I agree with you that they should be making things easier for the smaller companies, but I think that's where they are headed anyway? You buy a hosting package that comes with WP/WC, Gutenberg is vastly improved over the past few years, Full Site Editing has just launched, WC is working to fully support GB, so it seems to be getting easier already. Why not finally improve the bad foundations and try to win back people? p.s. Over the past few years, I've not come across any breaking changes with the plugins we use. All updates worked flawlessly (for us). The bugs we encounter come from third-party plugins (not maintained by WC) but I'd assume custom Shopify plugins might break too? This change is meant to be made as an opt-in initially, followed by opt-out, whilst keeping the tables running side by side for a while. I think this is the best approach and should give plugin developers plenty of time to update their code, so most stores won't be affected. Stores with custom plugins using wp-posts might have some issues, but it will probably be over a year before they see a breaking change and they'll likely have plenty of warnings before then. |
@jurijc I replied to your comment on the blog post, but for completeness, IMO adding billing phone as one of the primary identifiers would be more work than just adding a column. Therefore, we should take it up as a separate project sometime down the line rather than picking it up with this one. wdyt?
We plan to ensure compatibility at least with popular extensions irrespective of whether it's owned by WooCommerce. This is something we have been focussing on for some time now, where we would make sure that new features are compatible with extensions and do not cause disruptions. @feastdesignco I appreciate the candid feedback, and while I am glad that Shopify is working out for you, don't be surprised if you find yourself switching to WooCommerce very soon. You, me, and all of us are here for our combined love of everything open source, and I have no doubt we are building the best commerce experience one can have, open-source or not. We are still early in the project and doing the research work, but most concerns you listed are already being (or should be) addressed. We realize the complexity of this project, but we aim to complete this without disruptions by building whatever user journey paths that would allow us to do this. |
@vedanshujain thank you for feedback. I understand your plan make as less changes as possible in structure. In the same time it's good starting point to see where it will be going and take some things now into account because later it would be to much work to do to alter again (and it will not happen probably - it's reality). Regarding access to phone and email from blog post I think it's equal. Why I am proposing on including phone in order table, because it's one of main ways to identity customer, searching orders by phone is natural ( for example when you got a call from client: what is easier? search by this phone or ask "what is your email, can you spell it? ), or search all orders by phone ( there are a lot of cases when person uses different email and then have few accounts and usually only 1 phone) = that can be used to connecting order to one user profile (now it's not out of box). And guest order, or when you got order by customer calling shop, why do you need to ask email at all?) a lot of businesses receive calls and sometimes orders on phone. And also you can grab phone for any automation to send sms, and it will be there in one table. Real life cases and future use cases should shape DB. Maybe for starting point just including it as regular field, not as an index, is a way not to loose this and don't make it hard. One important field will not hurt but can be very useful. |
@feastdesignco |
HPOS was made available as part of WC 7.1 - https://developer.woocommerce.com/2022/11/08/woocommerce-7-1-0-released/ |
I'm recreating this thread. Because all the old thread about this seems always closed suddenly while in discussions.
Its been 5 years since Mikejolley starts working on it. But until now it's gone without any trace.
Is there any update about this feature?
This is the most important feature, if woocommerce want to scale.
Because we keep hearing some "woocommerce experts" says "I laugh when I hear someone say woocommerce can't scale".
In real life example. Many stores starts with woocommerce but once they become too big they always move to shopify. The most recent example is colourpop. They move to shopify after they hire many "woocommerce expert" to scale their system but all of them gave up which makes them move to shopify.
This is for comparison:
-) List of Top Shopify stores: https://www.automizely.com/store-list/top-100-shopify-stores
-) List of Top Woocoommerce stores: https://www.automizely.com/store-list/top-100-woocommerce-stores
-) List of Top Magento stores: https://www.automizely.com/store-list/top-100-magento-stores
As we can see The only real store which use woocommerce and rank under top 20000 alexa rank, only woocommerce.com.
We keep losing our "big clients" to our competitors.
The text was updated successfully, but these errors were encountered: