Oracle 数据库 table 用于保存 web-app 用户的 activity 日志
Oracle Database table for keeping web-app user's activity log
我想保留一个完整的 activity 日志,记录用户在我的网络应用程序中所做的所有操作。我制作了几张表格来帮助我做到这一点并遇到了这个问题:
我需要在一列中存储一个相对较长的文本。这是一个好的做法吗?例如,使用 varchar2(2000) 也是一个好的做法吗?我将有大约一两百万条记录。
一方面,就数据库中的存储 space 而言,这很好。 VARCHAR2 字段仅占用实际数据所需的 space,因此如果您只有 100 个字符,则数据库中将只使用这 100 个字符所需的 space。
另一方面,当您读取 数据库中的数据时,您可能会遇到问题。因为读取数据的程序不知道每行中实际存储了多少个字符,所以它可能会分配 space 的完整 2000 个字符,这样当数据从数据库传输到程序内存时 space 可用。如果同时将所有这些行读入内存,则两百万条记录大约需要 4 GB 的存储空间。
握手,你可能没有太多选择。如果您需要在列中存储此长度的字符串,请继续并将列设为 VARCHAR2(2000)
(或 4000,或在较新版本的 Oracle 中最多 32K)。请注意潜在的问题,如果发生内存问题,请不要感到震惊。请记住,硬件很便宜 - 程序员的时间很昂贵。
(顺便说一句 - "one hand/other hand/gripping hand" 模因来自 Larry Niven 和 Jerry Pournelle 的书 "The Mote In Gods Eye"。如果你是科幻迷但还没有读过它,你应该:-).
我想保留一个完整的 activity 日志,记录用户在我的网络应用程序中所做的所有操作。我制作了几张表格来帮助我做到这一点并遇到了这个问题: 我需要在一列中存储一个相对较长的文本。这是一个好的做法吗?例如,使用 varchar2(2000) 也是一个好的做法吗?我将有大约一两百万条记录。
一方面,就数据库中的存储 space 而言,这很好。 VARCHAR2 字段仅占用实际数据所需的 space,因此如果您只有 100 个字符,则数据库中将只使用这 100 个字符所需的 space。
另一方面,当您读取 数据库中的数据时,您可能会遇到问题。因为读取数据的程序不知道每行中实际存储了多少个字符,所以它可能会分配 space 的完整 2000 个字符,这样当数据从数据库传输到程序内存时 space 可用。如果同时将所有这些行读入内存,则两百万条记录大约需要 4 GB 的存储空间。
握手,你可能没有太多选择。如果您需要在列中存储此长度的字符串,请继续并将列设为 VARCHAR2(2000)
(或 4000,或在较新版本的 Oracle 中最多 32K)。请注意潜在的问题,如果发生内存问题,请不要感到震惊。请记住,硬件很便宜 - 程序员的时间很昂贵。
(顺便说一句 - "one hand/other hand/gripping hand" 模因来自 Larry Niven 和 Jerry Pournelle 的书 "The Mote In Gods Eye"。如果你是科幻迷但还没有读过它,你应该:-).