Timelinize配置详解:自定义数据存储路径与索引规则
为什么需要自定义配置?
你是否遇到过数据存储路径混乱、索引效率低下的问题?Timelinize作为一款本地化时间线数据管理工具(允许用户将所有账户和设备的数据存储在自己的计算机上,形成一个统一的时间线),提供了灵活的配置选项来解决这些痛点。通过本文,你将学会如何自定义数据存储路径和优化索引规则,让数据管理更高效、更符合个人习惯。
数据存储路径配置
默认存储路径
Timelinize的默认配置文件路径和数据存储路径如下:
-
默认配置文件路径:tlzapp/config.go
func DefaultConfigFilePath() string { cfgDir, err := os.UserConfigDir() if err == nil { return filepath.Join(cfgDir, "timelinize", "config.json") } cfgDir, err = os.UserHomeDir() if err == nil { return filepath.Join(cfgDir, ".timelinize", "config.json") } return filepath.Join(".timelinize", "config.json") } -
默认缓存目录:tlzapp/config.go
func DefaultCacheDir() string { cacheDir, err := os.UserCacheDir() if err == nil { return filepath.Join(cacheDir, "timelinize") } homeDir, err := os.UserHomeDir() if err == nil { return filepath.Join(homeDir, ".timelinize", "cache") } return filepath.Join(".timelinize", "cache") }
自定义存储路径
要修改数据存储路径,需要修改配置文件中的Repositories字段。这个字段定义了程序启动时要打开的时间线存储库的文件夹路径:
// The folder paths of timeline repositories to open at
// program start.
Repositories []string `json:"repositories,omitempty"`
操作步骤:
- 打开配置文件(默认路径见上文)
- 添加或修改
repositories字段,例如:"repositories": [ "/path/to/your/custom/repo1", "/path/to/your/custom/repo2" ] - 保存配置文件并重启Timelinize
索引规则配置
数据库架构
Timelinize使用SQLite数据库存储和索引数据,数据库架构定义在以下文件中:
- 主数据库架构:timeline/schema.sql
- 缩略图数据库架构:timeline/thumbnails.sql
数据库连接参数在timeline/db.go中定义:
func openDB(ctx context.Context, repoDir string) (*sql.DB, error) {
var db *sql.DB
var err error
defer func() {
if err != nil && db != nil {
db.Close()
}
}()
dbPath := filepath.Join(repoDir, DBFilename)
db, err = sql.Open("sqlite3", dbPath+"?_foreign_keys=on&_journal_mode=WAL")
if err != nil {
return nil, fmt.Errorf("opening database: %w", err)
}
// ...
}
自定义索引规则
虽然Timelinize的核心索引逻辑是内置的,但你可以通过以下方式影响索引行为:
-
数据源选择:Timelinize支持多种数据源,你可以选择需要索引的数据类型。数据源定义在datasources/目录下,例如:
- datasources/googlephotos/:Google Photos数据
- datasources/instagram/:Instagram数据
- datasources/社交平台/:社交平台数据
-
数据库连接参数优化:你可以修改数据库连接参数来优化索引性能。例如,调整SQLite的缓存大小或页面大小:
db, err = sql.Open("sqlite3", dbPath+"?_foreign_keys=on&_journal_mode=WAL&cache_size=-20000&page_size=4096")其中
cache_size=-20000表示使用20,000页的缓存(负号表示KB),page_size=4096设置页面大小为4KB。 -
实体类型和分类:Timelinize预定义了多种实体类型和分类,你可以通过修改相关代码来自定义:
- 实体类型定义:timeline/db.go
entityTypes := []string{ "person", "creature", // animals, insects, fish, pets... etc. "place", // landmarks... etc. "company", "organization", "office", // 职位、高管等... 实体类型随时间变化 TODO: 重命名为"职位"? "政府机构", }
高级配置
网站目录自定义
如果你需要开发或自定义Timelinize的前端界面,可以指定自定义的网站目录:
// Serves the website from this folder on disk instead of
// the embedded file system. This can make local, rapid
// development easier so you don't have to recompile for
// every website change. If empty, website assets that are
// compiled into the binary will be used by default.
WebsiteDir string `json:"website_dir,omitempty"`
配置方法:在配置文件中添加website_dir字段,指向你的前端代码目录:
"website_dir": "/path/to/your/custom/frontend"
地图API密钥配置
Timelinize支持地图功能,需要配置Mapbox API密钥:
// The API token to use for Mapbox GL JS and tiles. The
// user should set this to their own to guarantee
// availability of the maps.
MapboxAPIKey string `json:"mapbox_api_key,omitempty"`
配置方法:在配置文件中添加mapbox_api_key字段:
"mapbox_api_key": "your_mapbox_api_key_here"
配置文件示例
以下是一个完整的配置文件示例,包含了上述所有自定义选项:
{
"listen": ":8080",
"website_dir": "/path/to/custom/frontend",
"mapbox_api_key": "your_mapbox_api_key",
"repositories": [
"/path/to/repo1",
"/path/to/repo2"
],
"obfuscation": {
"enabled": false,
"seed": "random_seed_here"
}
}
总结
通过自定义Timelinize的配置,你可以:
- 灵活设置数据存储路径,更好地管理磁盘空间
- 优化索引规则,提高数据查询效率
- 定制前端界面,打造个性化使用体验
- 配置地图服务,增强地理位置数据展示
所有配置都围绕tlzapp/config.go文件展开,核心数据处理逻辑在timeline/目录中实现。如果需要更深入的定制,可以查阅相关源代码文件。
参考资料
- 配置文件源码:tlzapp/config.go
- 数据库操作源码:timeline/db.go
- 数据源实现:datasources/
- 前端界面:frontend/
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



