I think such functionality is absolutely an intended use case of xDB. From a high level, the approach would be:
- Create a custom facet for your customers which stores order history.
- Ensure that your customers are all imported into xDb, including order history.
- Ensure that when new orders are placed, that this facet is updated.
- Create a custom aggregation in your reporting database which effectively gives you "customers who bought X, also bought Y." Your "Fact" in this case would be:
- Purchased Product
- Other Product
- Count
- Create a rendering which queries the reporting table and displays recommended products, based on some sort of threshold and/or ordered by Count.
The specifics of any of the above are too broad for this answer I think (since you are simply asking if it's possible). I think the big limitations at this time will be:
- The need to duplicate your order data in xDB. In theory your
AggregationProcessor
could read directly from your order database however, if it's easily available. XConnect may help with the importing of this in the future. - You are potentially remotely querying the reporting database. Some performance testing and caching may be needed (though cache may be of limited use given the potential diversity of products / cache keys here). I assume that the forthcoming XConnect will help with this as well.
The real power of xDB would be adding additional elements to that Fact -- customer personas, geo, campaigns, etc. This allows you to essentially say "Customers LIKE YOU also bought," which you can't do with the commerce system on its own.