如何将包含大量属性的数据库数据存储到缓存中?

时间:2015-04-20 15:48:12

标签: java sql caching

我们说我有一个包含TABLE_ID,CUSTOMER_ID,ACCOUNT_NUMBER,PURCHASE_DATE,PRODUCT_CATEGORY,PRODUCT_PRICE列的表格。 此表包含在某些商店中进行的所有购买。

请不要专注于更改数据库模型(有明显的改进可能性),因为这是一个简单的示例,我无法更改实际的数据库模型,这远非完美。 我唯一能改变的是使用现有数据库模型的代码。

现在,我不想一直访问数据库,因此我必须将数据存储到缓存中,然后从那里读取数据。问题是,我的程序必须支持各种各样的事情:

  1. 客户X在日期Y的购买总价值是多少?
  2. X类产品的购买总价值是多少?
  3. 给我一个按customer_id分组的总金额列表。
  4. 我必须能够在缓存中保留此层次结构 一种可能的解决方案是在地图内的地图内部绘制地图......等等 但是,这很快就会变得混乱,因为我需要为表中的每个属性添加额外的嵌套级别。

    有更聪明的方法吗?

1 个答案:

答案 0 :(得分:0)

您是否已经确定需要缓存?您确定应用程序的性能需要它吗?数据库本身可以优化查询,在内存中存储等等。

如果您确定需要缓存,还需要考虑缓存失效:数据是否从脚下变化,即是更改数据库中数据的另一个过程,还是数据库数据不可变,或者您的应用程序是修改数据的唯一过程。

您希望缓存执行什么操作?只需跟踪已请求的查询和结果,以便第二次运行查询时,您可以从缓存中返回结果吗?或者你想积极地预先计算一些聚合?缓存数据是否适合您的应用程序内存,或者您是否希望使用ReferenceMaps,例如在内存变紧时缩小?

对于您的实际问题,为什么需要地图内的地图?您可能应该设计一些与您的业务模型更接近的东西,并以有意义的方式存储表示数据的对象。您可以将每个查询(PurchasesByCustomer,PurchasesByCategory)表示为对象,并将它们存储在不同的映射中,以便获得某种类型的安全性。同样地,不要使用地图作为结果,而是使用你想要的实际物体。

对不起,你的问题很模糊,但希望我能给你一些思考的食物。

相关问题