Я использую Firebase для своего приложения Chating. Я храню всю информацию о пользователе оттуда. Обычно, если база данных Firebase не имеет больших данных, она дает быстрый ответ. Но как только данные увеличиваются в базе данных, они становятся слишком медленными. Эта же база данных отлично работает на моем приложении для Android. Пожалуйста, помогите мне решить эту проблему.
Я использую следующий метод для извлечения данных из firebase.
-(void) get_grouplist_refresh_single{
@try{
appDel.totalUnreadMsg = 0;
[[FIRDatabase database] goOnline];
FIRDatabaseReference *rootRef= [[FIRDatabase database] referenceWithPath:[NSString stringWithFormat:@"/users/%@/activeGroups",appDel.UserId]];
[rootRef observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
//NSLog(@"group: %@", snapshot.value);
if ([snapshot exists]) {
NSDictionary *postDict = snapshot.value;
NSArray *key_dictionary=[postDict allKeys];
if (key_dictionary.count > 0) {
for (int i=0; i < key_dictionary.count; i++) {
[self set_listner_group :[key_dictionary objectAtIndex:i]];
[self load_all_active_groupmsg :[key_dictionary objectAtIndex:i]];
if(key_dictionary.count - 1 == i){
}
}
}else{
}
}else{
[[FIRDatabase database] goOnline];
}
}];
} @catch (NSException *exception) {
NSLog(@"NSException %@",exception);
} @finally {
}
}
-(void) set_listner_group :(NSString*) strGroupId{
@try{
FIRDatabaseReference *rootRef= [[FIRDatabase database] referenceWithPath:[NSString stringWithFormat:@"/groups/%@",strGroupId]];
[rootRef observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
if ([snapshot exists]) {
//Do somthing base on requirements
}
}];
} @catch (NSException *exception) {
NSLog(@"NSException %@",exception);
} @finally {
}
}
-(void) load_all_active_groupmsg :(NSString*)strgroupID{
FIRDatabaseHandle handlerLoadAllMsg = 0;
FIRDatabaseReference *rootRef= [[FIRDatabase database] referenceWithPath:[NSString stringWithFormat:@"/group_msgs/%@",strgroupID]];
[rootRef keepSynced:YES];
handlerLoadAllMsg = [rootRef observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot)
{
if (snapshot.exists)
{
[rootRef removeObserverWithHandle:handlerLoadAllMsg];
}
}];
}