База данных номеров работает очень медленно. По запросу 20 результатов с ограничением в 25 тысяч записей.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 База данных номеров работает очень медленно. По запросу 20 результатов с ограничением в 25 тысяч записей.

Сообщение Anonymous »

Код: Выделить всё

@Entity(tableName = "messages",
indices = [
Index(value = ["id"]),
Index(value = ["reply_id"]), // Index for faster querying on reply_id
Index(value = ["chat_id"])
])
@TypeConverters(MessageConverters::class) // Add this line

data class Message(
@ColumnInfo(name = "chat_id")
val chatId: Int,

@ColumnInfo(name = "sender_id")
val senderId: Long,

@ColumnInfo(name = "recipient_id")
val recipientId: Long,

@ColumnInfo(name = "sender_message_id")
val senderMessageId: Long,

@ColumnInfo(name = "reply_id")
val replyId: Long,

@ColumnInfo(name = "content")
val content: String,

@ColumnInfo(name = "read")
val read: Boolean = false,

@ColumnInfo(name = "status")
val status:ChatMessageStatus  = ChatMessageStatus.SENDING,

@ColumnInfo(name = "type")
val type:ChatMessageType  = ChatMessageType.TEXT,

@ColumnInfo(name = "file_id")
val fileId:String?=null,

@ColumnInfo(name = "last_sent_chunk_index")
val lastSentChunkIndex:Int=-1,

@ColumnInfo(name = "last_sent_byte_offset")
val lastSentByteOffset:Long=-1,

@ColumnInfo(name = "last_sent_thumbnail_byte_offset")
val lastSentThumbnailByteOffset:Long=-1,

@ColumnInfo(name = "last_sent_thumbnail_chunk_index")
val lastSentThumbnailChunkIndex:Int=-1,

@ColumnInfo(name = "file_abs_path")
val fileAbsolutePath:String?=null,

@ColumnInfo(name = "thumb_path")
val fileThumbPath:String?=null,

@ColumnInfo(name = "thumb_data")
val thumbData:String?=null,

@ColumnInfo(name = "cache_path")
val fileCachePath:String?=null,

@ColumnInfo(name = "download_url")
val fileDownloadUrl:String?=null,

@ColumnInfo(name = "file_metadata")
val fileMetadata: FileMetadata?=null,

@ColumnInfo(name = "timestamp")
val timestamp: Long

) {
@PrimaryKey(autoGenerate = true)
var id: Long = 0

// Function to convert ByteArray (thumbData) to Bitmap
fun getThumbnailBitmap(): Bitmap? {
return thumbData?.let {
File(thumbData).let {
if(it.exists()){

// Use 'use' to automatically close the stream after use
val options = BitmapFactory.Options().apply {
// Decode only bounds (no image data yet)
inJustDecodeBounds = true
}

// Step 1: Open the file input stream and decode just bounds
FileInputStream(it).use { inputStream ->
BitmapFactory.decodeStream(inputStream, null, options)
}

// Step 2: Set preferred config to save memory
options.inPreferredConfig = Bitmap.Config.RGB_565  // Uses 2 bytes per pixel instead of 4 (ARGB_8888)

// Step 3: Decode the image at full size (no scaling)
options.inJustDecodeBounds = false  // Load the actual image data
options.inSampleSize = 1  // No scaling down, retain original size

// Step 4: Decode the image with the final options
FileInputStream(it).use { inputStream ->
BitmapFactory.decodeStream(inputStream, null, options)
}
}else{
null
}
}

}
}
}

Код: Выделить всё

   @Deprecated("testing")
@Transaction
@Query("SELECT * FROM messages WHERE chat_id = :chatId ORDER BY id DESC LIMIT :limit")
fun getMessagesWithRepliesRaw1(chatId: Int, limit:Int): List

Я запрашиваю базу данных с 25 000 записями, но получение всего 20 результатов с использованием предложения LIMIT занимает значительное количество времени. Несмотря на то, что запрошено всего 20 строк, запрос выполняется медленнее, чем ожидалось. Вот запрос, который я использую:
Результаты возвращаются через несколько секунд (иногда даже дольше). Я проверил запрос на предмет базовой оптимизации производительности, например ограничения набора результатов, но проблема не устранена.
``
getMessagesWithRepliesRaw1(100,20)
``

Подробнее здесь: https://stackoverflow.com/questions/793 ... 5k-records
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»