2016-12-24 3 views
0

У меня есть веб-приложение (Rails), которое я хочу использовать для создания диаграммы. Пока что я делаю:Хранение данных диаграммы в базе данных

  • Загрузить файл, содержащий мои данные для отображения
  • Храните этот файл и связать его с моделью образца
  • Когда я хочу, чтобы просмотреть эту Sample извлечь данные из файл был предварительно загружен и создать диаграмму с помощью ChartJS

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

Каждый образец составляет около 1000 строк, поэтому кажется, что «не принято» хранить 1000 новых строк каждый раз, когда я создаю образец?


Сегодня у меня есть:

Sample 
..... id : int 
..... attachment : txt file containing the data 

Можно ли изменить его на:

Sample 
..... id : int 
..... attachment : txt file containing the data 
..... chart_data_id : associated ChartData 

ChartData 
..... id : int 
..... x : int 
..... y : int 

Я надеюсь, что я ясно с моими объяснениями ... К примеру, в моем базы данных У меня был бы один образец whiwh has_many ChartData:

Sample(id: 1, attachment: my_file, chart_id: 10) 

ChartData(id: 10, x: 0, y: 1) 
ChartData(id: 10, x: 3, y: 2) 
ChartData(id: 10, x: 5, y: 7) 
..... 

Thanks

ответ

1

Вообще говоря, объект ChartData, как вы уже догадались, отлично подходит для этого. Хотя, если Samplehas_many :chart_data, внешний ключ должен быть sample_id в таблице ChartData, так что ChartData может иметь уникальные идентификаторы.

И даже если это не типичная структура, которая используется часто, любая полуподобная база данных без проблем хранит несколько миллионов строк (в SQLite максимум 2^64). Вам действительно понадобится лот образцов, чтобы это стало проблематичным, и даже тогда есть механизмы, чтобы заставить его работать (т. Е. Разделение и т. Д.).

Есть, однако, другие возможности. Если, например, вы используете PostgreSQL и до тех пор, пока единственными атрибутами ChartData являются x и y, вы можете использовать массив из Point для атрибута, содержащего данные.

Что-то вроде

create_table :samples do |t| 
    t.point :chart_data, array: true, default: [] 
end 

Очки являются единственным типом геометрии поддерживается Rails из коробки и will be treated as arrays после извлечения из базы данных.

Или вы можете использовать JSON type для хранения хеша или массива в базе данных.

+0

Спасибо за советы. Я рассмотрю все эти решения, чтобы узнать, какой из них лучше для меня :) –