1

私はいくつかのデータを収集し、それを SQLite データベースに入れる組み込み Linux システムの魔女を持っています。新しいデータは毎秒追加されます。このデータをデータベースから取得し、highchart. したがって、毎秒新しいポイントをチャートに追加する必要があります。

次の例を出発点として使用しました: http://www.highcharts.com/studies/live-server.htm

動作しますが、ページにアクセスすると、CPU が 50% 使用されます (私はクロムを使用しています)。モージグラフをプロットしても 100% です。ライブ サーバーの例でも、CPU 使用率が上昇していることがわかります。アンサーを探してみましたが、何も見つかりませんでした。これが最善の方法ですか?またはこれはバグですか、それとも何か不足していますか? これが私のコードの一部です:

function request_accu_Data() {
    $.ajax({
        url: 'live-accu-data.php', 
        success: function(point) {
            var accu_series = accu_chart.series[0];
                shift = accu_series.data.length > 100; // shift if the series is longer than 100

            // add the point
            accu_chart.series[0].addPoint(eval(point), true, shift);

            // call it again after one second
            setTimeout(request_accu_Data, 500); 
        },
        cache: false
    });
}

$(document).ready(function() {
    accu_chart = new Highcharts.Chart({
        chart: {
            renderTo: 'Accu_graph_container',
            defaultSeriesType: 'spline',
            events: {
                load: request_accu_Data
            }
        },

        tooltip: {
             formatter: function() {

              return false;
               }
        },
            title: {
            text: 'Accu level'
        },
        xAxis: {
            type: 'datetime',
            tickPixelInterval: 150,
            maxZoom: 20 * 1000
        },
        yAxis: {
            minPadding: 0.9,
            maxPadding: 0.9,
            min: 0,
            max: 100,
            title: {
                text: '%',
                margin: 10
            }
        },
        series: [{
            //pointInterval: 3600 * 1000,
            name: 'Accu level',
            data: [
            ]
        }]
    });

php コードは次のようになります。

<?php 
// Set the JSON header
header("Content-type: text/json");


$db = new PDO('sqlite:/home/pi/client.db');
$result = $db->query('SELECT * FROM log ORDER BY ROWID DESC LIMIT 1');
foreach($result as $row){
    $ret = intval( $row['Timestamp'])*1000;
    $ret2= intval( $row['Accu_level']);
}

$tot = array($ret,$ret2);

echo json_encode($tot);
?>

あなたが私を助けてくれることを本当に願っています!

4

2 に答える 2

0

非常に遅い回答ですが、この種のデータには MySQL を使用しないことをお勧めします。RRD と noSQL の概念を組み合わせた Timestore をご覧ください

于 2013-11-29T16:42:09.220 に答える