Let's assume that our system should be efficient enough to handle 10 million orders per day, which will be about 10*1000000/24/60/60 which is roughly 120 orders per second.
Let's assume there are about 10 queries through which user searches, and only 5% of user end up ordering the product.
Therefore the total number of queries per second ~~ 120*10 /0.05 = 24000 queries/second, which is a sizeable query.
Also the delivery times to deliver a product from a store or distribution center to the customer should be limited to a maximum of 1 hour
Peak hour orders = 5x than usual ~ 5*24000=120000 queries/second.
Creating a Product/Item/Inventory in the System.
For this system design, we need to be able to do atomic transactions, for example if two users are trying to order the same items at the same time, one of them will be rejected if inventory is unavailable.
We also need to be able to update the items and inventory count, via joined tables, once the order has been created.
I would chose a MySQL database for the same. Some of the tables that will be used are.
1) A product Table - Product id, product name
2) Distribution center table - The id and location details of the distribution center.
Distribution center id, Latitude, Longitude
3) Inventory table - to store the amount available for each product belonging to a particular distribution center.
Id, product id, distribution center id, quantity available.
4) Users table - to store user details.
user id, user name, list of addresses, phone number, date created, isActive
5) Orders table - to store details of the orders created by users
order id, user id, order status, total order amount