Java在对象中存储各种机器数据

时间:2018-09-28 09:24:31

标签: java

我需要能够存储来自生产机器的传入数据以对其进行一些计算。我从API接收数据,看起来像这样:

[
    {
        "datasetId":23
        "timestamp":1538125706336,
        "machineData":[
            {
                "machineId":<UUID>,
                "type":"PLASTIC_INJECTOR",
                "data":[
                    "temperature":30,
                    "pressure":32
                ]
            },
            ...
        ]

    },
    ...
]

machineData数组包含多种不同类型的计算机,它们会发出不同的测量结果。一些有温度,其他有例如“消耗的水量”。另外,由于维护等原因,某些计算机处于脱机状态,因此阵列并不总是包含同一台计算机。我的问题是如何将这些信息存储在对象中。

我的想法是这样的:

public class MachineData{
    private long datasetId,
    private long timestamp;
    private Map<UUID, MachineDataEntry> dataPerMachine;
}

public class MachineDataEntry{
    private Map<String, float> measurements;
}

因此MachineDataEntry代表“ machineData”中每台计算机的“ data”数组的内容。

我对其进行了测试,并且可以在开发中使用,但是我担心,一旦我需要处理超过10000个条目的API响应,我可能会遇到性能问题。

还有其他更聪明的方法吗?

1 个答案:

答案 0 :(得分:0)

地图非常快。唯一的事情是您可能想选择HashMapTreeMapHashMap更加节省时间(O(1)个操作),TreeMap更加节省空间(不进行哈希处理,但是O(log(n))个操作)。

This问题有点相关。当您快速向HashMap添加很多元素时,可能需要重新整理很多东西,这会降低性能,但是如果您期望的话,可以通过在初始化时设置大容量(或容量增量)来修复它很多条目。