将Java中的购物篮存储为数据库中的Blob ...或不?

时间:2011-04-26 02:38:10

标签: java database database-design architecture

所以我正在开发一个需要持久购物篮的购物篮应用程序,我正在尝试决定是否将我的购物篮/商品作为blob存储在数据库中,或者将它们分成多个表格(*例如 - tbl_basket,tbl_basket_items ,tbl_basket_item_variants *)。我不需要对篮子物品进行分类或过滤。我将简单地根据soldto查询篮子( btw,每个售卖可能有多个篮子)。篮子只能在相对较短的时间内有效(最多6-12个月)。他们可能有几百个订单项(罕见的情况),但我不指望任何真正大的东西会降低性能。用户数量相对较少...最多400个并发用户。典型用法是大约50-100个并发用户。

我倾向于简单地将我的篮子存放为blob,因为它简单而且相对干净(是的,我很懒)。我的问题是,我错过了什么吗?这种方法有什么缺点。有什么好处?想到的一个缺点是,如果我的Basket对象发生变化,那么对于活动的篮子来说可能是个问题。

感谢您提供的任何见解。

5 个答案:

答案 0 :(得分:2)

使用basket,basket_item表模式,并为数据库不透明数据(如图像,文档等)留下blob。最终,您需要将篮子项目绑定到库存控制,或分析,或.... blob中的数据会破坏性能。

答案 1 :(得分:1)

不要存储在blob中。因为您今天不需要排序或过滤并不意味着您不会在明天或下周或下个月。而且,你将更好地保护自己免受变化;使用blob意味着在需求变化时转换为新格式的额外工作。

现在以正确的方式行事将为您节省大量的工作。

答案 2 :(得分:1)

在这里做你想做的事并没有什么本质上的错误。您基本上存储编码为二进制数据的哈希表(或对象或属性列表),并可通过单个密钥进行检索。当然,它会让其他领域的查询变得更加困难,但是如果你确定不需要它,那就继续吧。

您提出的解决方案基本上是为什么有些人更喜欢“对象数据库”而不是关系数据库。它们使存储物体变得非常容易!

答案 3 :(得分:1)

从各种角度来看,使用blob是个坏主意

  1. Blob很慢,de / serializing您的购物车将非常慢,您可能必须在每个客户的每个页面视图上执行此操作(为了显示项目计数,或者使用购物车显示完整的迷你小部件)内容)
  2. 面向未来,我知道我们不应该过度设计我们的解决方案,并始终牢记YAGNI原则,但我向您保证,最终企业会想要对您保存的购物车进行操作,例如分析废弃的购物车,最常被添加到购物车的商品,平均购物车价值,每辆车的平均商品数量等等,
  3. 如果你使用blobs进行长时间(可能是痛苦的)重新设计,你将会自己站起来。

答案 4 :(得分:0)

您最好在数据库中没有“智能列”。它们应该只是数据,这就是数据库。

智能色谱柱是一些需要进一步处理以使用它的色谱柱,例如:A1234 =>代表男性,1234是序列号。 更不用说你的“blob”购物车,它比之前的例子更“聪明”。

参考http://www.amazon.com/Refactoring-Databases-Evolutionary-Database-Design/dp/0321293533