Change feed update strategy to update a fixed subset of users every 5 minutes
This commit is contained in:
parent
ab8d541f8d
commit
75a1dfd0e4
|
@ -26,18 +26,26 @@ import { CATEGORY_LIST } from '../../common/categories'
|
||||||
|
|
||||||
const firestore = admin.firestore()
|
const firestore = admin.firestore()
|
||||||
|
|
||||||
|
const BATCH_SIZE = 30
|
||||||
|
const MAX_BATCHES = 50
|
||||||
|
|
||||||
|
const getUserBatches = async () => {
|
||||||
|
const users = _.shuffle(await getValues<User>(firestore.collection('users')))
|
||||||
|
let userBatches: User[][] = []
|
||||||
|
for (let i = 0; i < users.length; i += BATCH_SIZE) {
|
||||||
|
userBatches.push(users.slice(i, i + BATCH_SIZE))
|
||||||
|
}
|
||||||
|
userBatches = userBatches.slice(0, MAX_BATCHES)
|
||||||
|
|
||||||
|
console.log('updating feed batches', userBatches.length, 'of', MAX_BATCHES)
|
||||||
|
|
||||||
|
return userBatches
|
||||||
|
}
|
||||||
|
|
||||||
export const updateFeed = functions.pubsub
|
export const updateFeed = functions.pubsub
|
||||||
.schedule('every 60 minutes')
|
.schedule('every 5 minutes')
|
||||||
.onRun(async () => {
|
.onRun(async () => {
|
||||||
const users = await getValues<User>(firestore.collection('users'))
|
const userBatches = await getUserBatches()
|
||||||
|
|
||||||
const batchSize = 100
|
|
||||||
let userBatches: User[][] = []
|
|
||||||
for (let i = 0; i < users.length; i += batchSize) {
|
|
||||||
userBatches.push(users.slice(i, i + batchSize))
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('updating feed batch')
|
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
userBatches.map((users) =>
|
userBatches.map((users) =>
|
||||||
|
@ -72,13 +80,7 @@ export const updateFeedBatch = functions.https.onCall(
|
||||||
export const updateCategoryFeed = functions.https.onCall(
|
export const updateCategoryFeed = functions.https.onCall(
|
||||||
async (data: { category: string }) => {
|
async (data: { category: string }) => {
|
||||||
const { category } = data
|
const { category } = data
|
||||||
const users = await getValues<User>(firestore.collection('users'))
|
const userBatches = await getUserBatches()
|
||||||
|
|
||||||
const batchSize = 100
|
|
||||||
const userBatches: User[][] = []
|
|
||||||
for (let i = 0; i < users.length; i += batchSize) {
|
|
||||||
userBatches.push(users.slice(i, i + batchSize))
|
|
||||||
}
|
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
userBatches.map(async (users) => {
|
userBatches.map(async (users) => {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user