@Override
        public void entity2Storage(final ServiceTraffic storageData, final Convert2Storage converter) {
            final String serviceName = storageData.getName();
            storageData.setShortName(serviceName);
            int groupIdx = serviceName.indexOf(DOUBLE_COLONS_SPLIT);
            if (groupIdx > 0) {
                storageData.setGroup(serviceName.substring(0, groupIdx));
                storageData.setShortName(serviceName.substring(groupIdx + 2));
            }
            converter.accept(NAME, serviceName);
            converter.accept(SHORT_NAME, storageData.getShortName());
            converter.accept(SERVICE_ID, storageData.getServiceId());
            converter.accept(GROUP, storageData.getGroup());
            Layer layer = storageData.getLayer();
            converter.accept(LAYER, layer != null ? layer.value() : Layer.UNDEFINED.value());
            converter.accept(TIME_BUCKET, storageData.getTimeBucket());
        }
Primary key(id), to identify a service with different layers, a service could have more than one layer and be
saved as different records.

@return Base64 encode(serviceName) + "." + layer.value
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTraffic.java