2016-07-16 2 views
1

в моей игре, у меня есть набор точек для каждого уровня, называемые «точки», «пункта1» И «Points2»Сохранение больших объемов данных в базу данных

, например, в уровне 1 я эти очки:

Уровень 1:

Poitns: (0.3,0.04), (0.2,0.25), (1.5,0.5), (0.2,0.5), (0.3,0.04)

Poitns1: (0.5,0.04), (0,6,0,35), (0,5,0,5), (0,2,0,5), (0,3,0,04), (0,2,0,04)

Poitn s2: (0.3,0.04), (0.6,0.34), (0.5,0.5), (0.2,0.5), (0.3,0.04), (0.3,0.04)

Уровень 2: ...

Уровень 3: ...

у меня есть около 90 уровней в моей игре, и у каждого есть свои данные,

вопрос, как я могу сохранить данные thees в базу данных?

Один из вариантов является создание таблицы для каждого, Point1.x, Point1.y, Point2.x и ...

это будет большая база данных, с 6 таблиц.

еще один вариант - сохранить данные для всех данных Point1 в таблице как строку и вытащить числа с плавающей запятой путем разбора (например, сохранить 0,3,0,2,1,5,0,2,0,3,0,04 для очков.x, а затем проанализировать данные для каждой строки и проверить, когда он достигнет «,» ...) , но это настолько тяжелая операция для Android.

Какой будет лучший выбор? есть ли альтернативный путь, кроме базы данных?

, а если нет, то как мне сохранить эти данные, чтобы использовать меньше памяти для расчета и достижения данных?

+0

Соответствие количеству очков на каждом уровне? Я имею в виду «Points» «Point1» «Point2» и не более или менее? Также «Точки» всегда имеют 5 круглых скобок, а «Points1» с «Points2» всегда имеют 6 круглых элементов? – Marat

+0

@Marat no нет никакой роли для этого, все может быть разным, для каждого уровня, а количество очков различно для каждого уровня тоже –

+0

Создайте два вида таблицы: Level & Points. Затем в каждом Уровне установите правильные точки. – Amir

ответ

1

Я думаю, вы можете это сделать, используя SQLite db. Это отличный инструмент для сохранения и работы с текстами. Я не знаком с другими базами данных, но могу рассказать вам о том, как это решить, если вы будете использовать SQLite db. Надеюсь, что другие люди ответят и расскажут об альтернативных базах данных, чтобы вы сравнили их все.

Как вы уже сказали, вы можете хранить все числа с плавающей запятой для одной точки в одной строке. Затем создайте только одну таблицу для хранения всех данных. Это будет выглядеть примерно так.

_id | Points | Level 1 | Level 2 | Level 3 | ... | Level 90 
---------------------------------------------------------------------- 
    1 | Point1 | "0.3,..." | "0.4,..." | "0.3,..." | ... | "0,6,..." 
    2 | Point2 | "0.2,..." | null | "0.1,..." | ... | null 
    3 | Point3 | "0.3,..." | "0.5,..." | "0.4,..." | ... | "0.2,..." 
... 
... 

По null я имею в виду уровни, где особенно точка не применяется. Или вместо этого вы можете написать пустую строку "". И _id - столбец PRIMARY KEY AUTOINCREMENT, чтобы управлять автоматической вставкой новых строк Point (не влияет на ваши данные).

Идея состоит в том, что таким образом у вас может быть любое количество строк и фиксированное количество столбцов (в данном случае 90). Однако для таблицы могут быть другие лучшие или похожие решения.

Учитывая скорость современных процессоров (1-2 ГГц/ядро), вы можете выполнить до миллиарда операций за одну секунду. Сравните это число с размером строковых элементов. Я уверен, что ваша строка Points не будет слишком длинной, чтобы получить значительное время для ее обработки при извлечении из db. Поэтому вам не нужно беспокоиться о скорости.Вы можете даже запустить эти процессы в фоновом режиме, чтобы это не повлияло на ваш пользовательский интерфейс.

Недостатки:

Это не просто создать 90 столбцов, жестко прописывать все из них внутри onCreate внутри SQLiteOpenHelper. Но это всего лишь одно время.

Это было мое решение. Надеюсь, вам это поможет. Мне также интересно узнать о других Базах данных, которые могли бы помочь решить эту проблему проще, если это возможно.

+0

@ Alireza.pir был моим ответом полезным для вас? Если да, подумайте о принятии и ответе моего ответа. Я буду признателен. – Marat

Смежные вопросы