FRS文件库介绍
-
Upload
panjunyong -
Category
Documents
-
view
1.542 -
download
11
Transcript of FRS文件库介绍
FRS 文件库介绍
潘俊勇
易度 everydo.com
2002 年
我开始推广 Plone
世界级的 Plone
做什么?内容管理 CMS:
• 网站内容管理 ( 做网站 )
• 企业内容管理– 文档管理– 档案管理– 数字资产
( 此处略去辉煌若干 )
2007 年
全面放弃 Plone
为什么?
让我们换个思路。。。
我们曾经一无所有
若干年的努力
不断做加法
实现了
现代化
但我们的心灵
是否能真正得以休养?
我们的新世界• 更加复杂• 依赖更多• 消耗更多• 管理成本很高• ….
我们• 不能没有电• 不能没有互联网• 不能没有 qq
• 不能没有那么多的服务机构• 不能没有……
任何一个环节崩溃之时
• 数据还能取出吗• 工作还能继续吗• 我们的生活?
(思考 ing)
我们需要什么?
功能都是浮云
世界变化快的都在过时 ing
内容才是永久的财富
(心灵才是呵护之本)
读取内容的依赖下面任何一个环节出问题就玩完
• 文件系统• 操作系统• 数据库服务器• 应用服务器• 上层应用
做减法
什么是理想之所?
一时间,
多少技术网站倒戈…
Sphinx 的定位
程序员写文档发布到网站
管理更多内容?
文件、网页、视频、音频、打包文件、 office 文档
支持更多功能?
版本、回收站、快捷方式、元数据、格式转换
面向大众?
非程序员
FRS 诞生
( 其实早于 Sphinx)
解决内容存储的问题
更简单、更可靠、更可扩展
直接利用文件系统存储
数据库是浮云
文件系统也是浮云
FAT32 , NTFS , EXTn , HDFS
混乱着呢
文件路径问题• 路径格式
– C:\windows– /home/panjy/docs
• FAT32 路径只支持 256 个字符• NTFS 上,支持 3200 长度
– 但路径必须用: \\?\c:\windows
• 路径编码各异– mbcs– utf-8
Link 的支持硬盘空间不够?使用 Link 来扩展
• ext2 : 支持• FAT32 :不支持• NTFS :支持,但不方便
windows 更多问题…• 读文件必须采用 rb !• 被使用文件不能移动
(windows error 32)
• …
分布式文件系统?Hadoop 的分布式文件系统 HDFS
• 原生是 java 的接口• 接口使用差异非常大
杯具的 Python 文件操作封装
分散在三个包:
• os
• os.path
• shutils
能否统一?
让内容有可靠的栖身之所?
亮剑
FRS : File Repository System
FRS特点• 一个简单的 python 文件操作软件包• 虚拟文件系统:统一的文件路径• 统一的文件操作• 元数据• 回收站• 版本• 缓存• 可扩展…
建立虚拟文件系统• VFS = Virtual File Systeme
• 统一文件的路径• 通过配置文件,设置虚拟文件路径和实际
存储位置的映射关系• 统一基本文件操作
神奇的 .frs 文件夹
元数据. frs/abc.txt/metadata.json
• {• "main": {• "right_col":"",• "left_col":"",• "contenttype":"document"• },• "dublin": {• "description": "",• "title": " 易度云办公平台 , 互联网时代的新型 OA"• }• }
多版本• .frs/abc.txt/archived/1.txt
回收站• .frsremoved
• 按照文件夹和删除时间区分
缓存文件• Pdf->html• Doc->html• Doc->text• Zip 解压… .• …• 上述文件可由原始文件生成,丢失也不可怕
• 因此备份策略不同
理解 3种 path
• ospath : 文件系统的路径• vpath : 虚拟文件系统的路径• site_path : 应用的路径(网站的路径)
转换:• vpath = frs. sitepath2Vpath(site_path)
• ospath = frs.ospath(vpath)
配置 :frs.conf
• [cache]• path = /var/everydo-frscache
• [root]• sites = /var/everydo-frs• members=/var/home
• [site]• /=/sites• /members=/members
初始化from zopen.frs.core import loadFRSFromConfig
frs = loadFRSFromConfig(file(frsconf).read())
基本使用• frs.listdir()
• frs.dirs()
• frs.joinpath()
• frs.exists
• frs.basename
• frs.walk
• …
元数据def getMetadata(self, vpath):
def saveMetadata(self, vpath, metadata_body):
版本管理
def archive(self, path, id=None, **archiveInfo):
def listArchives(self, path):
def getArchiveInfo(self, path, archivename):
def copyArchive(self, path, archiveName, dstPath):
def removeArchive(self, path, archiveName):
回收站def recycleAssets(self, path, srcNames):
def listRemoves(self, path):
def listRemovedAssets(self, path, removeName):
def revertRemove(self, path, removeName, assetNames=[ def realRemove(self, path, removeName, assetNames=[]):
数据缓存• def getCacheFolder(self, vpath, cachenam
e=None):
• def hasCache(self, vpath, cachename=None):
• def removeCache(self, vpath,cachename=None):
• def moveCache(self, src, dst):
• def copyCache(self, src, dst, **kw):
源代码• zopen.frs.core
FRS 文件库核心包http://code.google.com/p/zopen-frs
• zopen.cms一个使用 frs 管理内容的简单内容管理系统充分利用 restructuredTexthttp://code.google.com/p/zopen-cms/
使用案例• 网站 :
– http://czug.org– http://everydo.com– http://zopen.cn– http://benky.czug.org
• 易度文档管理系统 (http://edodocs.com)
还需要 Plone 吗
不需要了如释重负了
Thanks