我想保留用户从我的Web应用程序执行的所有操作的完整活动日志。我做了几个表格来帮助我完成此任务,并遇到了这个问题: 我只需要在一列中存储相对较长的文本。这是一个好习惯吗?例如,使用 varchar2(2000)也是一个好习惯吗?我将有大约200万条记录。
答案 0 :(得分:2)
一方面,就数据库中的存储空间而言,这很好。 VARCHAR2字段仅占用实际数据所需的空间,因此,如果您只有100个字符,则数据库中将仅使用这100个字符所需的空间。
另一方面,当您从数据库中读取数据时,可能会遇到问题。由于读取数据的程序不知道每行实际存储了多少个字符,因此它可能会分配完整的2000个字符的空间,以便在将数据从数据库传输到程序的内存时可用。如果将所有这些行同时读入内存,那么对于200万条记录来说,这大约是4 GB的存储空间。
握住手,您可能没有太多选择。如果您需要在列中存储此长度的字符串,请继续将列设为VARCHAR2(2000)
(或4000,或者在新版本的Oracle中最大为32K)。请注意潜在的问题,如果发生内存问题,请不要感到震惊。请记住,硬件很便宜-程序员的时间很昂贵。
(顺便说一句,“一只手/另一只手/抓手”的模因来自拉里·尼文(Larry Niven)和杰里·普尔内尔(Jerry Pournelle)的书《神眼中的尘土》。阅读它,你应该:-)。