我正在编写一个基本的用户文件系统,它使用Firestore来存储文件元数据,使用CloudStorage for Firebase来存储实际文件。Firebase Storage并不是专门使用的,因为我们想在文件夹中添加几个属性,考虑到GCS没有“目录”,这些属性可能会变得麻烦。
在此系统中,有两种类型的项目:目录和文件夹。为了限制Firestore写入,子目录当前没有对其父目录的引用。父目录有一个数组,其中包含每个子ID,路径是通过遍历每个父目录的子数组来构建的。这样做是为了更容易移动文件(基本上,我们将子ID从一个目录的数组切换到另一个目录的数组)。否则,我们将不得不在文件夹移动时向每个子文件夹中写入一个新的父文件。
这是数据结构:
interface Directory {
id: string;
entryType: "directory";
name: string;
createdTimestamp?: Timestamp;
modifiedTimestamp?: Timestamp;
owners?: string[];
viewers?: string[];
editors?: string[];
children: string[]; // contains references to File's ID
color: string;
icon: string;
root: bool;
}
interface File{
id: string;
entryType: "file";
name: string;
createdTimestamp?: Timestamp;
modifiedTimestamp?: Timestamp;
owners?: string[];
viewers?: string[];
editors?: string[];
storagePath: string;
storageBucket: string;
contentType: string;
metadata: Record<string, string>
}
然而,根据我的观察,提供代驾服务的大公司往往会为每个孩子提供一个家长参考。这些大公司不太受多次写入成本的限制,而且我还没有发现这个系统中的致命缺陷(除了构造文件路径时的一些不便),所以我很好奇是否有人比我聪明,可以解释为什么应该或不应该添加父引用?谢谢!
1条答案
按热度按时间fbcarpbf1#
为了限制Firestore写入,子目录当前没有对其父目录的引用。
如果问题与您在Firestore中执行的写入次数有关,那么您为什么不使用Firebase Realtime Database?写操作是免费的。
父目录有一个数组,其中包含每个子ID,路径是通过遍历每个父目录的子数组来构建的。
由于实时数据库是一个完整的JSON对象,您可以使用键值对简单地创建对存储中文件的引用。