Я использую typeorm, где в операторах, где я получаю максимум (дату) для каждого местоположения и после примерно 70 местоположений, он возвращает данные через 90 секунд, где в SQL Server занимает всего 5 секунд.
этоэто то, что я получил до сих пор, этот код работает, но после большого количества несинхронизаций он замедляется до такой степени, что он больше не будет перезаписывать данные.выше
for (let i = 0; i < unsyncLocations.length; i++) {
const element = unsyncLocations[i];
const getLastTimeIn = await getRepository(TimeInOut)
.createQueryBuilder("TimeInOut")
.select("top 1 DateTrans")
.where("location = :location")
.setParameters({ location: element })
.orderBy("DateTrans", "DESC")
.getRawMany();
console.log(getLastTimeIn);
await unsyncData.push({
id: id,
location: element,
DateTrans: this.dateFormater(getLastTimeIn[0].DateTrans)
});
id++;
}
это сущность для timeinout
@Entity("TimeInOut")
export class TimeInOut {
@PrimaryColumn("int")
ID: number;
@Column("datetime")
DateTrans: string;
@Column("int")
Attrib1: string;
@Column("varchar", { length: 30 })
Attrib2: string;
@Column("int")
Attrib3: string;
@Column("int")
Attrib4: string;
@Column("int")
IsSync: string;
@Column("varchar", { length: 100 })
location: string;
@Column("datetime")
timeStampLog: string;
@Column("varchar", { length: 500 })
CompanyId: string;
@Column("varchar", { length: 500 })
sourcelocation: string;
}
вот эквивалентный запрос
select Max(DateTrans) from TimeInOut where location in ('location1','location2',etc...)
на выходе будет
dateTrans
9/29/2019
9/29/2019