Мы вроде говорили про то как организовать хранение. Шардирование и кеш это немного из другой области и никак не относятся к организации структуры хранения.
Ну вот чтобы не быть голословным - на БОЛЬШИЕ объемы данных. То есть реально вот - миллионы записей на десятки миллионов тегов. Внимательно слушаю.
var str = 'Недалеко от Перта находится {object/100:Драммон Касл}, окруженный прекрасными садами. {object/101: что-то другое}';
var replaceStrs = [
"{object/101: что-то другое}",
"{object/100:Драммон Касл}",
].map(e=> {
let n = e.match("object/(\\d+)\s*:\s*([^}]+)");
return "\{object/("+n[1]+"):("+n[2]+")\}";
});
replaceStrs.forEach((e)=>{
str = str.replace(new RegExp(e,"gm"),'<a href="{% url \'tipsfortrip:routes:route-detail\' pk=$1 %}">\n$2\n</a>')
});
var str = 'Недалеко от Перта находится {object/100:Драммон Касл}, окруженный прекрасными садами. {object/101: что-то другое}';
var replaceStrs = [
"\{object/(101): (что-то другое)\}",
"\{object/(100):(Драммон Касл)\}",
];
replaceStrs.forEach((e)=>{
str = str.replace(new RegExp(e,"gm"),'<a href="{% url \'tipsfortrip:routes:route-detail\' pk=$1 %}">\n$2\n</a>')
});
var str = 'Недалеко от Перта находится {object/100:Драммон Касл}, окруженный прекрасными садами. {object/101: что-то другое}';
var replaceStrs = [
"\{object/101: (что-то другое)\}",
"\{object/100:(Драммон Касл)\}",
];
replaceStrs.forEach((e)=>{
str = str.replace(new RegExp(e,"gm"),'<a href="{% url \'tipsfortrip:routes:route-detail\' pk=100 %}">\n$1\n</a>')
});