FaunaDB 允许我按单个字段索引数据项,并通过索引进行分页,但我看不到选择随机项的方法。
1 回答
在任何数据库中,大规模选择随机项目都是困难的。根据您的要求,有两种主要技术可供选择。
为您的查询定义和使用索引。这使您可以完全控制诸如两次选择同一项目等行为。
搭载现有索引。这对于开发任务更有用,您只想查看随机记录,但不关心公平分配。
无论您选择哪个,您最终都会想要FaunaDB 索引文档。对于选项 2,此活动提要教程包含大量索引事件查询示例。
随机索引
在每个实例上维护一个包含随机数的字段,并将其用作索引值。然后对值进行分页,以随机开始键。这种方法允许随机过程多次选择相同的项目。
它可以通过添加一个整数字段来计算实例被选中的次数来扩展以获得更多控制。您可以在选择实例的同一事务中增加计数。通过使用 selection-count 作为索引项,您可以查询已被选择零次的随机项目。一旦您选择了所有项目一次,您可以重复该1
术语以开始选择已选择一次但不是两次的项目。
现有指数
数据是 FaunaDB 是时间的,因此您可以使用时间特征以一种可能足够随机的方式选择实例,具体取决于您的用例。
如果您想利用已有的索引,并且实际上并不关心公平随机性,而只是想要一种廉价的方式来检查数据集中的不同实例,则可以在生命周期内从随机时间戳分页您的应用程序,使用事件视图,并在您的类中采样不同的实例。
使用无术语类索引,您将从整个类中选择实例,但它也可以用于在带有术语的索引的单个术语中选择实例。
如果某些时间段对您的写入活动(最近的过去,用于快速增长的服务)有很大的平衡,您可能希望将合成光标偏向于繁重的时间段。