A few months ago, I developed a tag-based personalisation system for Members. It's simple to use and easy on your database.
It works based on tags on pages and content and stores these against members efficiently in session. Once the member has finished their journey, it stores them into your Umbraco database.
Upon a repeat visit, the code pulls the member's persona from the database and back into session for efficient access. It then displays personalised content appropriately.
Personalisation of content is easy with simple base controllers and methods:
viewModel.PersonalisedPromotions = Personalise(viewModel.Promotions, true);
viewModel.PersonalisedPromotionsWithoutBackfill = Personalise(viewModel.Promotions);
viewModel.Pages = Personalise(viewModel.MenuItems, true);
There is also a Global.cs file that sets the persona to the database upon session end.
Please reference the controllers in the web project within the solution for an example of this.
There is a new website project in the solution with an example of how to use the nuget package.
Important, remember to change the global.asax to use the Personalisation.Core.Global to upsert to database on session end.
Umbraco 8.5.3 +
Any questions or suggestions, please let me know :)