数据库存储与文件存储

时间:2015-10-03 10:23:39

标签: java mysql database performance serialization

我必须建立一个发票系统,发票必须存放10年。存储发票的最佳方法是什么?

1。 SQL数据库:

Ex:
  • 表格客户端(代码,名称,地址,电话......)

    - 表产品(Part_Number,Description,Price ...)

    -Table Invoice(Invoice_No,Client_code,Product,Quantity ...)

发票产品将由唯一的发票号跟踪。

Invoice_No | Client_Code | Product | Quantity

000000001 | Bob_025445 | Shoes...| 7

000000001 | Bob_025445 | Shirt......| 17

000000002 | Susan_22111| Hat.......| 1

000000001 | Bob_025445 | Boots ...| 1

2。将发票保存到文件:将类序列化为文件:

    public class Invoice implements Serializable {
    private String invoiceNr;
    private Date invoiceDate; 
    private Client client;
    private List<products> products;

    ...
    }

序列化为00000001.inv,00000002.inv ...并反序列化以进一步咨询,打印等... 保存到文件我可以生成XML,但是我会遇到与序列化案例相同的问题。 第一个模型更容易为每个细节生成报告,而且速度很快,但是,在10年内,每天只有10个发票,每个发票只有10个项目,发票表将会非常大......

第二种模式看起来更好,但是,如果我想生成关于&#34;谁买鞋&#34;例如,程序将不得不迭代每个文件,这很慢。

所以,请帮我提出任何建议或第三个想法。女巫是最好的做法?

谢谢!

3 个答案:

答案 0 :(得分:0)

我认为大数据就是这种情况......它适用于大容量存储,并且可以快速生成报告。 只需确保在准备存储这些数据时不需要更新这些数据。

IBM对大数据概念的实施有很多见解,但谷歌和MS也有其他大数据见解....

答案 1 :(得分:0)

我建议你有两个老式的关系数据库心态表。 Invoce和InvoiceHstr(与发票日期分开)。

另外,您可能有一个摘要报告的“标题”表。

InvoiceHeader(持有产品,numberOFSold ......,fromDate,toDate)等。

其次只是在您的物理文件中存储上个月的文件,例如Invoice表的数据。

有关详细搜索和进一步报告,请使用两个表的并集。

此外,如果这张发票属于电信运营商或银行,那么你必须使用BigData技术。您也可以使用一些BI缓存查询。

答案 2 :(得分:0)

最好的建议是,只要有复杂的数据来表示大量信息,就选择数据库引擎。

有很多原因,大多数数据库引擎都是可扩展的,从大多数数据库引擎获得的性能和可靠性在很多时候要比在你手中编写一个好得多,而且它们抽象出许多复杂性,是处理文件很难,在你尝试之前你不会知道它,用SQL这么容易。

请注意,某些数据库引擎实际上是基于文件的(如sqlite),因为它将所有内容存储在文件中,并且不需要服务器。

是选择数据库服务器(如mysql)还是基于文件的sqlite取决于您的应用程序,基于文件适用于桌面应用程序数据,而mysql适用于Web应用程序(或任何网络应用程序)基)。

所有这些以及更多,你可以做一些事情来提高数据库性能(比如索引),而那些给你的技术也很难手工实现。

在你的情况下,我建议你使用数据库引擎,虽然我不能说sqlite或mysql或其他因为它取决于你的需要。

还有一条建议,将主键定义为字符串(Invoice_No应该是整数)被认为是不好的做法,您可以控制其格式和最大大小,因此您不需要字符串。

在使用SQL数据库时,我唯一担心的是我用来连接它的编程语言,我在这里没有使用java的经验,但是在C#中它有#s用LINQ轻松一点。