2016-10-23 5 views
-1

오랜 시간 통계를 수집하도록 설정하고 있습니다. 그것은 그것보다 더 자주있을 것입니다부분적으로 필드를 가져 오거나 수정할 수 있습니까?

[date:03.01.2016,data][date:02.01.2016,data][date:01.01.2016,data]... 

이 (단지 샘플) 같은 셈 이죠 .. 내가 최근 첫 번째 텍스트 필드에 모든 스틱 계획입니다 작은 블록에 기록되지만 작은 남아 있어야한다 수십 년 동안 계속 녹음하기에 충분하지만 아직 나를 최적화하기에 충분할 정도로 커야합니다.

나는 2 일

  1. MySQL에서 필드의 전면에 추가 할 수 찾고 있어요?
  2. 필드를 부분적으로 읽을 수 있습니까? 예를 들어 처음 100 자만 읽을 수 있습니까?

블록은 고정 길이이므로 X 기간 동안 통계를 표시하기 위해 다운로드해야하는 문자 수를 정확하게 예측할 수 있습니다. 당신이 질문에

+3

이렇게 많은 점에서 좋지 않은 것처럼 들립니다. 첫째, 수천 개 이상의 타임 스탬프를 실제로 추가하려는 경우 열의 공간을 쉽게 초과 할 수 있습니다. 또한 이전 값을 업데이트하여 추가를 시뮬레이션 할 수도 있지만 이렇게 좋지는 않습니다. 더 나은 옵션은 각 타임 스탬프 토큰을 자체 _record_에 배치하는 것입니다. –

+0

누군가 일정 기간 동안 통계를 요청할 때 - 당신은 무엇을 할 것입니까? 스팅을 분석 하시겠습니까? –

+0

이 작업을 통해 서버, 사용자 및 저장소를 원하는대로 생각한다고 생각하십니까? – Drew

답변

1

대답은 "예"입니다 :

update t 
    set field = concat($newval, field) 
    where id = $id; 

그리고 :

select left(field, 100) 
from t 
where id = $id; 

(.이 당신이 테이블에 여러 행이 있다고 가정)

말했다 , 당신은 데이터를 저장하는 방법이 절대적으로 관계형 데이터베이스에서 옳은 일이 아닙니다.

은 아마도, 당신은 다음과 같이 보이는 테이블 원하는 : (. data 여러 열해야 경우가 더 복잡 할 수있다)

create table t (
    tId int auto_increment primary key, 
    creationDate date, 
    data <something> 
); 

그런 다음 테이블에 삽입 :

insert into t(createDate, data) 
    select $date, $data; 

그리고 가장 최근 행을 가져올 수 있습니다.

select t.* 
from t 
order by tId desc 
limit 1; 

질문은 데이터의 완전한 그림을 제공하지 않으므로이 모든 것은 단지 예일뿐입니다.

+0

고든이 맞습니다. 연결된 데이터를 RDMS의 'TEXT'필드에 넣는 것은 망치를 사용하여 새 가구에 나사를 넣는 것과 같습니다. 엉망이 될 것이고, 가구를 사용하기 시작하자마자 가구가 분해 될 것입니다. –

+0

그것의 조금 더 까다로운 그때, 나는 수천 개의 다른 객체 (테이블의 행)에 대한 데이터를 수집하고 통계는 객체의 컨텍스트에서 의미가있을 것이라는 점을 감안할 때, 필드로는 – user81993

+0

@ user81993에 대한 별도의 테이블을 만드는 것보다 빠르고 일반적으로 더 효율적입니다. . .객체 당 하나의 행과 데이터 당 하나의 행을 가진'ObjectData' 테이블이 필요합니다. 데이터를 하나의 연결된 필드에 넣으면 안됩니다. 그것은 단순히 잘못된 접근입니다. –

관련 문제