小说系统有必要把内容存到数据库不?

2015-11-10 17:26:27 +08:00
 yy001

准备弄个小说程序,
但不知道小说内容是直接存到数据库还是 txt 里面

假设预计 10W 本 平均每本 1000 章

还是数据库 跟 txt 都存?

10952 次点击
所在节点    问与答
23 条回复
111111111111
2015-11-10 17:55:00 +08:00
用来下载的话附件就好了,如果在线阅读的话,数据库吧,不然跳章翻页多痛苦
gamexg
2015-11-10 17:57:12 +08:00
存数据库你算下会有多少 TB 吧。
之前想做小说站,结果算了一下尺寸把我吓住了。

3*3000 字 /章 * 1000 章 * 10W = 900000000000 字节 = 0.8TB
abelyao
2015-11-10 18:15:58 +08:00
小说可以存 txt 或其它文件,文件名随机生成,
数据库保存索引关系,例如 第一章第一页 => 7646c928-0b09-4c96-b96d-17a98d5fb4a2.txt
这样数据库也要不了多少空间,同时还可以降低存储成本
kslr
2015-11-10 18:27:23 +08:00
@gamexg 这。。。。。。
Zzzzzzzzz
2015-11-10 18:31:40 +08:00
@gamexg 反了, 数据库一般都带压缩的, 大文本的压缩比还成, 而一般用的 ext3 和 ext4 都是不带压缩的, 最小 block 默认 4k, 还有拆分文件夹的占用,反而会大得多。
ksc010
2015-11-10 18:31:47 +08:00
若放数据库的话可以选择 支持压缩的引擎
小说的压缩率应该挺客观 并且是静态数据一般不会变动吧
Zzzzzzzzz
2015-11-10 18:36:31 +08:00
用 mysql 的话记得把 txt 单独一个表。

我是偏向数据库的, 一方面比文本文件小, 二来无论全盘备份还是异地同步都方便得多.

万一有性能瓶颈, 拆成其他 backend 也很容易。
yy001
2015-11-10 18:37:21 +08:00
@ksc010
存数据库的话
1 章节 1 条记录?
dphdjy
2015-11-10 19:37:07 +08:00
数据库无误~~存 txt io 成本高~!

后期在线预览不好拓展~~最好的是一段一个条目~~:)

用 4 层 id 定位~~
blacktulip
2015-11-10 19:40:14 +08:00
要提供下载的话只怕得都存,不然难道动态生成一个 txt
Kilerd
2015-11-10 20:16:58 +08:00
@blacktulip 下载的话确实可以动态生成。

建议还是存数据库好,毕竟可以压缩,纯文本的压缩率还是挺客观的。
yy001
2015-11-10 20:24:35 +08:00
@dphdjy
用 4 层 id 定位~~
什么意思
dphdjy
2015-11-10 20:34:17 +08:00
@yy001 之前做小说站的时候用的~

bid,vid,cid,pid

book,volume,chapters,paragraph


book
```
{
"author": "支仓冻砂",
"bookid": 109,
"cover": "cover",
"introduction": "旅行商人罗伦斯在马车货台上的麦束堆里,发现睡梦中的少女。自称是丰收之神赫萝的美丽少女,有着狼的耳朵及尾巴。「虽然咱长久以来被尊为神,不过,咱就是咱,咱是赫萝。」 罗伦斯不断被说话狡诈的赫萝捉弄。尽管无法确信赫萝是否是掌控丰收的狼神,罗伦斯还是答应让赫萝与他一同旅行。二人展开旅途不就,一个意外的发财机会降临,据说某种银币在不久的将来会升值。新村怀疑的罗伦斯觉得放手一搏,但是—— 第 12 届电击小说“银赏”得奖作品 贤狼与商人的奇妙之旅—— 说话老气横秋并充满智慧,却又十足孩子气的赫萝真的是狼神吗?怀着如此疑问的罗伦斯与她踏上了旅程…… 结合商业活动与独特角色魅力的必读杰作!",
"press": "电击文库",
"subtitle": "",
"title": "狼与香辛料",
"updatetime": 1344532584000
}
```

volume
```
{
"bookid": 109,
"cover": "cover",
"order": 455,
"subtitle": "",
"title": "狼与香辛料\u00A0 第 01 卷",
"updatetime": 1344532584000,
"volumeid": 455
}
```

chapter
```
{
"bookid": 109,
"chapterid": 3400,
"order": 0,
"subtitle": "",
"title": "第 0 章 序幕",
"volumeid": 455
}
```

paragraph
```
{
"bookid": 109,
"chapterid": 3400,
"C": "从阵阵摇摆的麦穗缝中仰望的秋天天空,即使过了好几百年也不曾改变,但是底下的人事物全变了样。",
"T": 0
}
```
dphdjy
2015-11-10 20:35:26 +08:00
@dphdjy 手滑了~

paragraph
```
{
"bookid": 109,
"chapterid": 3400,
"volumeid": 455
"content": "从阵阵摇摆的麦穗缝中仰望的秋天天空,即使过了好几百年也不曾改变,但是底下的人事物全变了样。",
"type": 0
}
```
ksc010
2015-11-10 20:40:05 +08:00
@yy001 可以啊 看你具体需求
movtoy
2015-11-10 20:56:01 +08:00
用数据库只是对复杂数据的管理本身有需求,例如查询。

其他用途都是滥用
Tink
2015-11-10 21:01:15 +08:00
我觉得还是 txt 好,理由如上,数据库对于查询类的需求很得手,但是这种 90%纯文本的还是交给 txt 靠谱
tabris17
2015-11-10 21:34:41 +08:00
如果没有全文检索需求的话可以压缩后存数据库。
我写了个自己用的小说库,使用 sqlite 做数据库,备份的时候只要复制一个文件就行了
master
2015-11-10 22:14:51 +08:00
TokuDB
msg7086
2015-11-10 22:16:58 +08:00
@movtoy
看小说 -> 查询
书 /卷 /章多级架构 -> 复杂数据

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/235128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX