Jetzt bin ich für eine persönliche Schreibplattform in einer Schulbibliothek verantwortlich. Das grundlegende Geschäftsmodell ist abgeschlossen, aber das Projekt wurde nicht in einer Umgebung mit hoher Parallelität optimiert.
Jeder Schüler kann eine Buchrezension schreiben oder sich Notizen machen, nachdem er ein Buch gelesen hat. Buchrezensionen sind öffentlich und Notizen sind privat. Nach der aktuellen Praxis greift jeder Studentenbetrieb zur Abfrage auf die Datenbank zu, sodass es in Zukunft definitiv zu einem Leistungsengpass kommen wird.
Ich habe mir wahrscheinlich die Tutorials zum Thema Ehcache angesehen, aber es gibt keine gute Lösung. Der Hauptgrund ist, dass ich nicht beurteilen kann, ob der Cache ungültig ist. Wenn Sie beispielsweise eine bestimmte Anzahl von Notizen von Schülern mit hoher Frequenz in den Cache legen und ein bestimmtes Timeout von 5 Minuten festlegen, was sollten Sie tun, wenn innerhalb dieser 5 Minuten eine neue Notiz hinzugefügt oder geändert wird?
Wenn beispielsweise eine SQL-Anweisung einer SQL-Anweisung in Mybatis entsprichtEin neuer Datensatz wird hinzugefügt oder aktualisiert, wie kann dann der in ehcache hinzugefügte Cache ordnungsgemäß aktualisiert werden? select * from comments condition
,我可以通过ehcache建立一个内存缓存,但是如果comments
既然是缓存,那就一定对数据实效性有容忍度,否则要严格实时的数据,就只能访问数据库查询了。
根据题主描述的业务场景来看,普遍的解决方案是通过外置索引来维护图书和书评的关系(当然索引也不是完全实时的),再通过kv缓存(redis,ehcache,map等等)来缓存书评的具体内容。
在数据更新(update)时,通常情况先更新数据库,然后更新缓存,索引不需要更新。
在数据更新(insert)时,需要在update基础上,再增加相应的关系到索引中。
简单的外置索引,可以在数据库中,增加一张(图书-书评)关系表,建好索引,在查询书评时先查询(分页查询)关系表,再通过书评主键,查询具体书评信息(缓存加在单条书评信息上),建议分两次查询并在内存中组装数据,不要使用连表查询(影响数据库性能)。关系表数据不需要建立缓存,只需要增加书评信息的缓存即可。